gpt4 book ai didi

python - 为通过 groupby 应用结果设置列名称

转载 作者:太空狗 更新时间:2023-10-29 17:09:57 27 4
gpt4 key购买 nike

这是一个相当微不足道的问题,但它触发了我的强制症,在过去的半小时里我一直没能找到合适的解决方案。

作为背景,我希望为 DataFrame 中的每个组计算一个值(我们称之为 F),该值源自现有 DataFrame 中不同列的聚合度量。

这是我正在尝试做的一个玩具示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['X', 'Y', 'X', 'Y', 'Y', 'Y', 'Y', 'X', 'Y', 'X'],
'B': ['N', 'N', 'N', 'M', 'N', 'M', 'M', 'N', 'M', 'N'],
'C': [69, 83, 28, 25, 11, 31, 14, 37, 14, 0],
'D': [ 0.3, 0.1, 0.1, 0.8, 0.8, 0. , 0.8, 0.8, 0.1, 0.8],
'E': [11, 11, 12, 11, 11, 12, 12, 11, 12, 12]
})

df_grp = df.groupby(['A','B'])
df_grp.apply(lambda x: x['C'].sum() * x['D'].mean() / x['E'].max())

我想做的是为 apply(或 lambda)的结果指定一个名称。有没有办法在不将 lambda 移动到命名函数或在运行最后一行后重命名列的情况下执行此操作?

最佳答案

让 lambda 函数返回一个新系列:

df_grp.apply(lambda x: pd.Series({'new_name':
x['C'].sum() * x['D'].mean() / x['E'].max()}))
# or df_grp.apply(lambda x: x['C'].sum() * x['D'].mean() / x['E'].max()).to_frame('new_name')

new_name
A B
X N 5.583333
Y M 2.975000
N 3.845455

关于python - 为通过 groupby 应用结果设置列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com