[英]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,1
是f0
和2
是f1
)進行分箱,並對每個箱內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.