簡體   English   中英

Pandas groupby 切和

[英]Pandas groupby cut sum

我正在嘗試對一列進行分箱並獲取滿足索引條件的行的總和。

這是我正在使用的 DataFrame 的示例:

df 

A    B    C    D
a    aa   0    1
a    aa   1    2
a    aa   2    10
a    bb   0    4
a    bb   1    5
a    bb   2    60
b    aa   0    7
b    aa   1    8
b    aa   2    90
b    bb   0    10
b    bb   1    11
b    bb   2    12

我想做的是首先對特征列C (即0,1f02f1 )進行分箱,並對每個箱內D列中的值求和,並仍然保持各自A和 B` 索引對完好無損。 結果如下:

A    B    C    D
a    aa   f0   3
a    aa   f1   10
a    bb   f0   9
a    bb   f1   60
b    aa   f0   15
b    aa   f1   90
b    bb   f0   21
b    bb   f1   12

我已經使用pandas.cut完成了分箱,如下所示:

cut = pd.cut(df['C'], bins=[0,2,3], right=False, labels=['f0','f1'])

但是我無法使用df.groupby(cut)保持索引對(列A,B )完好無損,我不想自己遍歷所有可能的(A,B)對和 bin + 對它們求和。

任何幫助,將不勝感激。

您需要將定義所需組的附加列添加到您的 groupby 語句中:

from io import StringIO

import pandas

df = pandas.read_table(StringIO("""\
A    B    C    D
a    aa   0    1
a    aa   1    2
a    aa   2    10
a    bb   0    4
a    bb   1    5
a    bb   2    60
b    aa   0    7
b    aa   1    8
b    aa   2    90
b    bb   0    10
b    bb   1    11
b    bb   2    12"""), sep='\s+')

output = (
    df.assign(C=pandas.cut(df['C'], bins=[0,2,3], right=False, labels=['f0','f1']))
      .groupby(['A', 'B', 'C'], as_index=False)  
      .sum()  
)

 A   B   C   D
 a  aa  f0   3
 a  aa  f1  10
 a  bb  f0   9
 a  bb  f1  60
 b  aa  f0  15
 b  aa  f1  90
 b  bb  f0  21
 b  bb  f1  12

重新分配groupby中的值后,您可以在['A','B','C']上進行C

df['C'] = np.where(df['C'].isin([0,1]), 'f0', 'f1')
df = df.groupby(['A','B','C']).sum().reset_index()

結果:

   A   B   C   D
0  a  aa  f0   3
1  a  aa  f1  10
2  a  bb  f0   9
3  a  bb  f1  60
4  b  aa  f0  15
5  b  aa  f1  90
6  b  bb  f0  21
7  b  bb  f1  12

暫無
暫無

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

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