簡體   English   中英

Pandas數據幀組由多列組成

[英]Pandas dataframe group by multiple columns

給定具有兩個日期時間列AB以及數字列C的數據幀,如何month分組AB以及sum(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

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

我最近剛剛閱讀了一個新功能,它使日期分組變得非常容易。

 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

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

如果您結合使用以下內容,您將使用A和B列中的相應值返回結果

idsum = df.groupby([df.A.dt.month,df.B.dt.month])["C"].transform(sum) == df["C"]
df=df[idsum]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM