提问人:Fakir 提问时间:8/21/2019 更新时间:8/21/2019 访问量:63
月份或指定的日期范围分组
month or specified date-range wise grouping
问:
想要按月或指定的日期范围对我的数据进行分组。拥有近 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日)明智地将它们分开。
提前致谢。
答:
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
尝试了第一个。完善!非常感谢。在各种情况下也会非常方便。
评论