gpt4 book ai didi

python - 如何在 pandas 0.20.1+ 中重命名多级分组中的所有列

转载 作者:太空狗 更新时间:2023-10-29 22:17:59 26 4
gpt4 key购买 nike

随着 Pandas 0.20.1 的发布,对 groupby.agg() 的功能进行了新的弃用,其中包含用于重命名的字典。

Deprecation documentation

我正在尝试找到更新我的代码以解决这个问题的最佳方法,但是我正在努力解决我目前如何使用此重命名功能。

当我进行聚合时,我经常为每个源列设置多个函数,并且我一直在使用此重命名功能来获得具有这些新列名称的单级索引。

例子:

df = pd.DataFrame({'A': [1, 1, 1, 2, 2],'B': range(5),'C': range(5)})

In [30]: df
Out[30]:
A B C
0 1 0 0
1 1 1 1
2 1 2 2
3 2 3 3
4 2 4 4

frame = df.groupby('A').agg({'B' : {'foo':'sum'}, 'C': {'bar' : 'min', 'bar2': 'max'}})

结果是:

Out[33]: 
B C
foo bar bar2
A
1 3 0 2
2 7 3 4

然后我通常会这样做:

frame = pd.DataFrame(frame).reset_index(col_level=1)

frame.columns = frame.columns.get_level_values(1)

frame
Out[42]:
A foo bar bar2
0 1 3 0 2
1 2 7 3 4

因此,我正在寻找获得单级索引但具有新的唯一列名称的结果数据框的好方法。其中多个列源自单个源列的聚合。非常感谢任何最佳方法的建议。

最佳答案

这在 0.20.1 版本中完美运行:

d = {'sum':'foo','min':'bar','max':'bar2'}
frame = df.groupby('A').agg({'B' : ['sum'], 'C': ['min', 'max']}).rename(columns=d)
frame.columns = frame.columns.droplevel(0)
frame = frame.reset_index()
print (frame)
A foo bar bar2
0 1 3 0 2
1 2 7 3 4

如果多个 min:

d = {'B_sum':'foo','C_min':'bar','C_max':'bar2'}
frame = df.groupby('A').agg({'B' : ['sum'], 'C': ['min', 'max']})
frame.columns = frame.columns.map('_'.join)
frame = frame.reset_index().rename(columns=d)
print (frame)
A foo bar bar2
0 1 3 0 2
1 2 7 3 4

关于python - 如何在 pandas 0.20.1+ 中重命名多级分组中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43895292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com