我正在尝试将列绑定,并对满足索引条件的行进行求和。
下面是我正在使用的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)放入bin中,并在每个bin中将列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)对并对它们求和。
任何帮助都将不胜感激。
发布于 2021-02-13 08:57:32
您需要将定义所需组的其他列添加到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发布于 2021-02-13 09:12:07
在C中重新赋值后,可以在['A','B','C']上执行groupby
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 12https://stackoverflow.com/questions/66180900
复制相似问题