【问题标题】:Group by and aggregate pandas按 Pandas 分组和聚合
【发布时间】:2019-08-26 02:17:14
【问题描述】:

我有这个数据框并给出了每列的数据:

index = [1, 2, 3, 4, 5, 6, 7]
a = [1247, 1247, 1247, 1247, 1539, 1539, 1539]
b = ['Group_A', 'Group_A', 'Group_B', 'Group_B', 'Group_B', 'Group_B', 'Group_A']
c = [np.nan, 23, 30, 27, 18, 42, 40]
d = [50, 51, 67, np.nan, 44, 37, 49]
df = pd.DataFrame({'ID': a, 'Group': b, 'Unit_sold_1': c, 'Unit_sold_2':d})

如果我想对每个 ID 的 Unit_sold 求和,我可以使用以下代码:

df.groupby(df['ID']).agg({'Unit_sold_1':'sum', 'Unit_sold_2':'sum'})

但是,如果我想按 ID 和 Group 对它们进行分组,我应该编写什么代码。结果如下所示:

     ID  Group_A_sold_1  Group_B_sold_1  Group_A_sold_2  Group_B_sold_2
0  1247              23              57             101              67
1  1539              40              60              49              81

【问题讨论】:

    标签: python-3.x pandas group-by


    【解决方案1】:

    使用pivot_table 执行此操作,然后合并列

    s=df.pivot_table(index='ID',columns='Group',values=['Unit_sold_1','Unit_sold_2'],aggfunc='sum')
    s.columns=s.columns.map('_'.join)
    s.reset_index(inplace=True)
          Unit_sold_1_Group_A  ...  Unit_sold_2_Group_B
    ID                         ...                     
    1247                 23.0  ...                 67.0
    1539                 40.0  ...                 81.0
    [2 rows x 4 columns]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 2014-11-17
      • 2019-10-12
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多