Pandas数据帧组由多列组成

时间:2017-09-25 15:33:13

标签: python pandas

如果数据框包含两个日期时间列AB以及数字列C,则如何按month和{{A进行分组1}}和B

sum(C)

4 个答案:

答案 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]