Pandas数据框按多列分组

10

给定一个包含两个日期时间列 AB,以及一个数值列 C 的数据框,如何按照 AB 的月份分组,并且对 C 求和,即:

In [1]: df
Out[1]: 

      A           B            C  
0  2013-01-01  2013-01-01  0.282863 
1  2013-01-02  2013-01-01  0.173215 
2  2013-02-03  2013-02-04  2.104569 
3  2013-02-09  2013-04-15  0.706771 
4  2013-03-05  2013-08-01  0.567020 
5  2013-03-06  2013-04-01  0.113648
4个回答

11
通过使用 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) 

4

不确定它是否完全是这样工作的...它可能是 pd.Grouper(key=['A','B'],freq='M')。 - Yale Newman

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()

0
如果您将其与以下内容结合使用,则可以在A列和B列中获取相应值的结果。
idsum = df.groupby([df.A.dt.month,df.B.dt.month])["C"].transform(sum) == df["C"]
df=df[idsum]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接