月份或指定的日期范围分组

month or specified date-range wise grouping

提问人:Fakir 提问时间:8/21/2019 更新时间:8/21/2019 访问量:63

问:

想要按月或指定的日期范围对我的数据进行分组。拥有近 3 个月的非唯一日期 (YYYY-MM-DD) 数据,这些数据已经采用 pandas 的“日期”格式,例如

Col1 Col2 Date       Val 
12   23   2018-11-20  4
13   78   2018-09-21  4
14   82   2018-10-28  5
15   22   2018-11-10  8
17   35   2018-10-23  9

想在11月(11日)、10月(10日)、9月(09日)明智地将它们分开。

提前致谢。

python pandas 日期

评论

0赞 jezrael 8/21/2019
示例数据的预期输出是什么?

答:

1赞 jezrael 8/21/2019 #1

这里最好的是创建字典:

df['Date'] = pd.to_datetime(df['Date'])

d = dict(tuple(df.groupby(df['Date'].dt.month)))
print (d)
{9:    Col1  Col2       Date  Val
1    13    78 2018-09-21    4, 10:    Col1  Col2       Date  Val
2    14    82 2018-10-28    5
4    17    35 2018-10-23    9, 11:    Col1  Col2       Date  Val
0    12    23 2018-11-20    4
3    15    22 2018-11-10    8}

print (d[9])
   Col1  Col2       Date  Val
1    13    78 2018-09-21    4

艺术

d = dict(tuple(df.groupby(df['Date'].dt.strftime('%b'))))
print (d)
{'Nov':    Col1  Col2       Date  Val
0    12    23 2018-11-20    4
3    15    22 2018-11-10    8, 'Oct':    Col1  Col2       Date  Val
2    14    82 2018-10-28    5
4    17    35 2018-10-23    9, 'Sep':    Col1  Col2       Date  Val
1    13    78 2018-09-21    4}

print (d['Nov'])
   Col1  Col2       Date  Val
0    12    23 2018-11-20    4
3    15    22 2018-11-10    8

建议这样做,但可以按组创建 DataFrames:

for i, g in df.groupby(df['Date'].dt.strftime('%b')):
    globals()['df_' + str(i)] =  g

print (df_Nov)
   Col1  Col2       Date  Val
0    12    23 2018-11-20    4
3    15    22 2018-11-10    8

如果需要按月汇总:

df.groupby(df['Date'].dt.month).sum()

艺术

df.groupby(df['Date'].dt.strftime('%b')).sum()

评论

0赞 Fakir 8/21/2019
谢谢。我的解释可能不好。我只想将数据帧拆分为多个部分,例如主数据帧中的“df_nov”、“df_oct”、“df_sept”。您建议的那个将所有其他列的值与这三个月相关的值相加(以后可能会有用)。
1赞 Fakir 8/21/2019
尝试了第一个。完善!非常感谢。在各种情况下也会非常方便。