如果数据框包含两个日期时间列A
和B
以及数字列C
,则如何按month
和{{A
进行分组1}}和B
即
sum(C)
答案 0 :(得分:6)
使用groupby
df.groupby([df.A.dt.month,df.B.dt.month]).C.sum()
Out[954]:
A B
1 1 0.456078
2 2 2.104569
4 0.706771
3 4 0.113648
8 0.567020
Name: C, dtype: float64
注意:使用此功能,请确保A和B为日期时间格式如果不是,请在groupby
之前执行以下代码
df.A=pd.to_datetime(df.A)
df.B=pd.to_datetime(df.B)
答案 1 :(得分:1)
我最近刚刚阅读了一个新功能,它使日期分组变得非常容易。
df.A=pd.to_datetime(df.A)
df.B=pd.to_datetime(df.B)
df.groupby([pd.Grouper(key='A', freq='M'), pd.Grouper(key='B', freq='M')])['C'].sum()
这打开的选项数量值得研究:
来源:http://pbpython.com/pandas-grouper-agg.html
不同的日期别名:http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases
答案 2 :(得分:0)
df['month_A'] = [i.month for i in pd.to_datetime(df.A)]
df['month_B'] = [i.month for i in pd.to_datetime(df.B)]
df.groupby(['month_A', 'month_B']).sum()
答案 3 :(得分:0)
如果您结合以下内容,您将使用A和B列中的相应值
返回结果idsum = df.groupby([df.A.dt.month,df.B.dt.month])["C"].transform(sum) == df["C"]
df=df[idsum]