为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过聚合从组中删除 Pandas 中的嵌套列名?

如何通过聚合从组中删除 Pandas 中的嵌套列名?

杨__羊羊 2021-07-08 13:11:53
我有以下代码,它使用 group byEmployee_id和聚合 with查找每个员工的总销售额和唯一销售额Customer_id。Sales.groupby('Employee_id').agg({    'Customer_id': [        ('total_sales', 'count'),        ('unique_sales', 'nunique')]})重要的是要知道我也将与其他列执行聚合,但到目前为止,这就是我写的全部内容。因此,如果您有建议的解决方案,请考虑一下,以防万一。虽然这在计算每位员工的总销售额和唯一销售额并创建两列方面完全符合我的要求,但它会创建嵌套的列名称。所以列名看起来像 [('Customer_id', 'total_sales'), ('Customer_id', 'unique_sales')],这是我不想要的。有什么方法可以轻松摆脱嵌套部分以仅包含 ['total_sales', 'unique_sales'],或者是在完成所有操作后重命名列的最简单方法?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

您可以简单地重命名列:


import numpy as np

import pandas as pd

np.random.seed(2018)


df = pd.DataFrame(np.random.randint(10, size=(100, 3)), columns=['A','B','C'])

result = df.groupby('A').agg({'B': [('D','count'),('E','nunique')],

                              'C': [('F','first'),('G','max')]})

result.columns = result.columns.get_level_values(1)

print(result)

或者,您可以保存groupby对象,并用于grouped[col].agg(...) 生成子数据帧,然后可以将其pd.concat组合在一起:


import numpy as np

import pandas as pd

np.random.seed(2018)

df = pd.DataFrame(np.random.randint(10, size=(100, 3)), columns=['A','B','C'])

grouped = df.groupby('A')

result = pd.concat([grouped['B'].agg([('D','count'),('E','nunique')]),

                    grouped['C'].agg([('F','first'),('G','max')])], axis=1)

print(result)

两个代码片段都产生以下结果(尽管列的顺序可能不同):


    D  E  F  G

A             

0  18  8  8  9

1  12  8  6  6

2  14  8  0  8

3  10  9  8  9

4   7  6  3  5

5   8  5  6  7

6   9  7  9  9

7   8  6  4  7

8   8  7  2  9

9   6  5  7  9

总的来说,我认为事后重命名列是最简单、更易读的选择。


查看完整回答
反对 回复 2021-07-13
  • 1 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号