【问题标题】:pandas: groupby and aggregate without losing the column which was groupedpandas:groupby 和聚合而不会丢失分组的列
【发布时间】:2017-01-19 08:52:56
【问题描述】:

我有一个如下的熊猫数据框。对于每个 ID,我可以有多个名称和子 ID。

Id      NAME   SUB_ID
276956  A      5933
276956  B      5934
276956  C      5935
287266  D      1589

我想压缩数据框,使每个 id 只有一行,并且每个 id 下的所有名称和 sub_id 在该行上显示为单个集合

Id      NAME           SUB_ID
276956  set(A,B,C)     set(5933,5934,5935)
287266  set(D)         set(1589) 

我尝试按 id 分组,然后聚合所有其他列

df.groupby('Id').agg(lambda x: set(x))

但这样做的结果数据框没有 Id 列。当您执行 groupby 时,id 作为元组的第一个值返回,但我猜当您聚合时会丢失。有没有办法获得我正在寻找的数据框。即groupby和aggregation不会丢失被分组的列。

【问题讨论】:

  • 请注意,将非标量对象存储在 Series 和 DataFrames 中的支持有限,并且可能导致意外结果。

标签: python pandas dataframe group-by


【解决方案1】:

如果您不希望 groupby 作为索引,则有一个参数可以避免进一步重置:

df.groupby('Id', as_index=False).agg(lambda x: set(x))

【讨论】:

    【解决方案2】:

    groupby 列成为索引。您可以简单地重置索引以将其取回:

    In [4]: df.groupby('Id').agg(lambda x: set(x)).reset_index()
    Out[4]: 
           Id       NAME              SUB_ID
    0  276956  {A, C, B}  {5933, 5934, 5935}
    1  287266        {D}              {1589}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      相关资源
      最近更新 更多