【问题标题】:Flatten nested pandas dataframe columns展平嵌套的 pandas 数据框列
【发布时间】:2018-03-01 22:02:57
【问题描述】:

经过一些聚合后,我的数据框看起来像这样

  A     B
        B_min   B_max
0 11     3       6       
1 22     1       2
2 33     4       4

如何使列成为AB_minB_max,而不进行任何嵌套?简单而标准。我试过reindex_axix()unstack(),但没有任何效果。

【问题讨论】:

  • 创建这个 df 的代码是什么?你用的是什么方法?也许一开始就修复它比修改结果更好
  • 可惜不在我手上,不过如果你能告诉我怎么改groupby语句,我可以和负责人核实一下……

标签: python pandas dataframe multi-index


【解决方案1】:

这是一种方法,但我希望有一种内置的方法来做到这一点。

import pandas as pd

df = pd.DataFrame({'A': [11, 11, 22, 22, 33, 33],
                   'B': [3, 6, 1, 2, 4, 4]})

g = df.groupby('A', as_index=False).agg({'B': ['min', 'max']})

g.columns = ['_'.join(col).strip() if col[1] else col[0] for col in g.columns.values]

#     A  B_min  B_max
# 0  11      3      6
# 1  22      1      2
# 2  33      4      4

【讨论】:

  • 这似乎大部分都有效,只是它在未嵌套的其他列中添加了一个尾随下划线。
  • @BaronYugovich,请参阅更新。但我希望有更好的方法。
  • 也许,让我们看看其他人是否提出了不同的建议。如果没有,我会在一天左右选择你的答案。
  • 这实际上是一个相当常见的用例恕我直言,它很容易在R 中完成,因为有一个内置函数可以做到这一点。熊猫,出于某种特殊原因,似乎没有看到用例,我花了很长时间才得到你的答案,而我知道我正在寻找应该相当简单的东西。
猜你喜欢
  • 2023-03-07
  • 2020-09-27
  • 1970-01-01
  • 2021-05-14
  • 2020-03-11
  • 2021-04-27
  • 2023-03-03
  • 2021-10-09
  • 2023-03-17
相关资源
最近更新 更多