【问题标题】:How to grouping and transform in pandas如何在 pandas 中进行分组和转换
【发布时间】:2017-01-26 10:55:34
【问题描述】:

现在我有以下数据框

A B C
1 1 1 
1 2 1
1 3 2
2 4 2
2 5 2
2 6 3

我想按df.A分组,并在df.B中总结

但是,我想将 C 转换为每个组元素中的第一个。

所以我想得到下面的结果。

A B  C
1 6  1
2 15 2

如何保持 df.C 并转换每个组的第一个元素?

我试过 df.groupby(A)[B].sum() 但我不知道下一步...

【问题讨论】:

  • 如果我的回答解决了您的问题,那么您可以接受它,这样问题就不会一直悬而未决
  • 感谢合作!我接受了!

标签: python pandas dataframe


【解决方案1】:

您可以使用 agg 并传递一个 func 的字典以在感兴趣的列上执行:

In [115]:
df.groupby('A').agg({'B':'sum','C':'first'}).reset_index()

Out[115]:
   A  C   B
0  1  1   6
1  2  2  15

dict 具有 col 名称和要在每个 col 上执行的 func,这里我们可以将 func 的字符串名称传递给 sumfirst

要重新排序列,您可以使用精美的索引:

In [116]:
df.groupby('A').agg({'B':'sum','C':'first'}).reset_index().ix[:,df.columns]

Out[116]:
   A   B  C
0  1   6  1
1  2  15  2

【讨论】:

  • 第二种方法中的列是如何按顺序重新排列的。
  • @MYGz ix[:,df.columns] 这里ix 为所有行采用:,但它会将列重新排序为传递的列的顺序,这里它将输出排序为原始df列顺序
  • 啊。知道了。 Groupby 会创建一个新的 df 对象吗?
  • groupby 只是一个描述分组应该如何执行的对象,只有当你调用一些方法或聚合时,它才会执行操作并根据需要返回一个 Series 或 DataFrame
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 2021-05-12
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多