python - 如何将函数应用于依赖于多个列的 groupby 子组?
问题描述
取以下数据框和 groupby 对象。
df = pd.DataFrame([[1, 2, 3],[1, 4, 5],[2, 5, 6]], columns=['a', 'b', 'c'])
print(df)
a b c
0 1 2 3
1 1 4 5
2 2 5 6
dfGrouped = df.groupby(['a'])
我将如何应用于 groupby 对象,将和dfGrouped
的每个元素相乘,然后求和。所以对于这个例子,对于组和组。b
c
2*3 + 4*5 = 26
1
5*6 = 30
0
所以我想要的 groupby 对象的输出是:
a f
0 1 26
2 2 30
解决方案
如果需要多个所有列而不a
使用DataFrame.prod
聚合sum
:
df = df.drop('a', 1).prod(axis=1).groupby(df['a']).sum().reset_index(name='f')
print (df)
a f
0 1 26
1 2 30
辅助列的替代方案:
df = df.assign(f = df.drop('a', 1).prod(axis=1)).groupby("a", as_index=False).f.sum()
如果只需要多个列,一个想法是使用评论中的@sammywemmy 解决方案:
df = df.assign(f = df.b.mul(df.c)).groupby("a", as_index=False).f.sum()
print (df)
a f
0 1 26
1 2 30
推荐阅读
- assembly - 使用 32 位汇编打印一组字母/数字
- algorithm - 选择球涂成红色的方法有多少?
- legend - 根据图例块的大小制作主图区域
- aws-lambda - 对 Amazon Lambda 函数的 Amazon lex 未知话语
- react-native - 需要帮助:我想在 react native 中创建拖放
- pandas - 定位一列中的值,然后使用相应的日期戳搜索其他列
- c# - 使用实体框架更新一条记录
- c++ - 如何修复此特征矩阵求逆溢出错误?
- r - 根据 R 中另一个数据框的规则,将多个变量添加到数据框
- java - Angular中的OAuth2身份验证Java Spring错误