我有一个数据框,想按几列和不同级别的值对其进行分组。另外,我想将分组结果附加到原始数据框中。
这是原始数据框:
AAA BBB CCC
x1 y1 yes
x1 y1 yes
x1 y1 no
x1 y2 no
x2 y2 yes
x2 y2 no
这就是我想要的:
AAA BBB CCC Yes No
x1 y1 yes 2 1
x1 y1 yes 2 1
x1 y1 no 2 1
x1 y2 no 0 1
x2 y2 yes 1 1
x2 y2 no 1 1
这里的想法是,我想按 AAA 和 BBB 进行分组,并在 CCC 中为每个组计算是/否。然后,我想将计数值添加到 2 个新列"is"和“否”中。
提前致谢!
最佳答案
一种方法是:
- 按
AAA
和BBB
分组 - 获取每个组的
CCC
的value_counts()
- 将最里面的值计数索引(由
yes
和no
组成)解压到列中 - 将计数与原始 DataFrame 合并
counts = (df.groupby(['AAA', 'BBB'])['CCC']
.value_counts()
.unstack()
.fillna(0)
.astype(int))
counts.columns = counts.columns.str.title()
pd.merge(df, counts, left_on=['AAA', 'BBB'], right_index=True)
AAA BBB CCC No Yes
0 x1 y1 yes 1 2
1 x1 y1 yes 1 2
2 x1 y1 no 1 2
3 x1 y2 no 1 0
4 x2 y2 yes 1 1
5 x2 y2 no 1 1
关于python - Pandas 按多列和值级别进行分组并将结果附加到原始数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57128046/