Python Pandas:使用Aggregate与Apply来定义新列

 艾灸养生加盟 发布于 2023-02-13 20:29

假设我有一个像这样的数据帧:

n = 20
dim1 = np.random.randint(1, 3, size=n)
dim2 = np.random.randint(3, 5, size=n)
data1 = np.random.randint(10, 20, size=n)
data2 = np.random.randint(1, 10, size=n)
df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})

如果我定义一个返回分组的函数:

def h(x):
    if x['val2'].sum() == 0:
        return 0
    else:
        return (x['val1'].sum())*1.0/x['val2'].sum()*1.0

按列之一进行分组并聚合返回结果:

df.groupby(['a']).aggregate(h)['val1']

虽然它将所有现有列转换为所需结果,而不是添加新列

使用聚合时,按两列分组会导致错误:

df.groupby(['a','b']).aggregate(h)['val1']

KeyError: 'val2'

但转换聚合申请似乎有效.

我有两个问题:

    为什么应用工作而不是聚合?

    如果在通过某组键对数据帧进行分组后,我想使用将组值聚合为新列的函数,那么最好的方法是什么?

提前致谢.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有