熊猫重命名多级查找列名[重复]
Posted
技术标签:
【中文标题】熊猫重命名多级查找列名[重复]【英文标题】:Pandas rename multilevel looking column names [duplicate] 【发布时间】:2020-05-03 19:00:17 【问题描述】:我有一个数据框,其列名已更改为
MultiIndex([( 'ID', ''),
('Probability', 'mean'),
('Probability', 'median'),
('Uncertainty', 'mean'),
('Uncertainty', 'median')],
)
因为我做到了
data[data["ID"].notnull()].groupby(["ID"]).agg("Probability":["mean", "median"], "Uncertainty":["mean", "median"]).reset_index()
我想将列名重命名为:
["ID", "Probability_mean", "Probability_median", "Uncertainty_mean", "Uncertainty_median"]
我可以单独重命名每个原始列名,但不能一起重命名它们。我还尝试扁平化数据框,因为我认为它是多索引或多级。虽然看起来如此,但它不是一个。大多数多索引功能不适用于它。有没有办法重命名这些列?我错过了什么吗?
【问题讨论】:
【参考方案1】:如果使用pd.__version__ > 0.25.0
,您可以使用NamedAggs
创建字典。
在reset_index
之前,您可以使用str.join
在groupby 之后折叠MultiIndex。然后reset_index
。这避免了'ID'
的问题。另外,不需要删除空组键,因为groupby
默认会忽略这些。
样本数据
import pandas as pd
import numpy as np
N = 6
df = pd.DataFrame('ID': np.arange(N)//2,
'Probability': np.random.normal(0,1,N),
'Uncertainty': np.random.normal(0,1,N))
agg_d = 'Probability': ['mean', 'median'], 'Uncertainty': ['mean', 'median']
代码:
>= 0.25.0
d = f'k_x': pd.NamedAgg(column=k, aggfunc=x) for k,v in agg_d.items() for x in v
df.groupby('ID').agg(**d).reset_index()
res = df.groupby('ID').agg(agg_d)
res.columns = ['_'.join(tup) for tup in res.columns]
res = res.reset_index()
输出:
ID Probability_mean Probability_median Uncertainty_mean Uncertainty_median
0 0 0.795119 0.795119 0.466417 0.466417
1 1 0.150184 0.150184 -0.132942 -0.132942
2 2 1.250202 1.250202 -0.102760 -0.102760
res = df.groupby('ID').agg(agg_d)
res.columns = ['_'.join(tup) for tup in res.columns]
res = res.reset_index()
ID Probability_mean Probability_median Uncertainty_mean Uncertainty_median
0 0 0.795119 0.795119 0.466417 0.466417
1 1 0.150184 0.150184 -0.132942 -0.132942
2 2 1.250202 1.250202 -0.102760 -0.102760
【讨论】:
哇!两种解决方案都有效!非常感谢! 好的,我回来只是想告诉你我喜欢你的 NamedAgg 解决方案!再次感谢!以上是关于熊猫重命名多级查找列名[重复]的主要内容,如果未能解决你的问题,请参考以下文章