首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas groupby cut sum

Pandas groupby cut sum
EN

Stack Overflow用户
提问于 2021-02-13 08:49:10
回答 2查看 145关注 0票数 1

我正在尝试将列绑定,并对满足索引条件的行进行求和。

下面是我正在使用的DataFrame的一个例子:

代码语言:javascript
复制
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)放入bin中,并在每个bin中将列D中的值相加,同时仍然保持各自的A和B‘索引对不变。其结果将如下所示:

代码语言:javascript
复制
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完成了装箱,如下所示:

代码语言:javascript
复制
cut = pd.cut(df['C'], bins=[0,2,3], right=False, labels=['f0','f1'])

但是我很难使用df.groupby(cut)保持索引对(列A,B)的完整性,而且我不希望自己迭代所有可能的(A,B)对并对它们求和。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-13 08:57:32

您需要将定义所需组的其他列添加到groupby语句中:

代码语言:javascript
复制
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()  
)
代码语言:javascript
复制
 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
票数 1
EN

Stack Overflow用户

发布于 2021-02-13 09:12:07

C中重新赋值后,可以在['A','B','C']上执行groupby

代码语言:javascript
复制
df['C'] = np.where(df['C'].isin([0,1]), 'f0', 'f1')
df = df.groupby(['A','B','C']).sum().reset_index()

结果:

代码语言:javascript
复制
   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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66180900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档