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

我有以下代码,它使用 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'],或者是在完成所有操作后重命名列的最简单方法?


杨__羊羊
浏览 270回答 1
1回答

蝴蝶刀刀

您可以简单地重命名列:import numpy as npimport pandas as pdnp.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 npimport pandas as pdnp.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  GA             0  18  8  8  91  12  8  6  62  14  8  0  83  10  9  8  94   7  6  3  55   8  5  6  76   9  7  9  97   8  6  4  78   8  7  2  99   6  5  7  9总的来说,我认为事后重命名列是最简单、更易读的选择。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python