python中rename函数_python-重命名Pandas Groupby函数中的列名

在groupby操作之后,用于更改列名的当前(从0.20版本开始)方法是链接df.columns = df.columns.droplevel(0)方法。 有关更多详细信息,请参见文档中的此弃用说明。

自熊猫0.20版起弃用的答案

这是google中的第一个结果,尽管最佳答案有效,但它并未真正回答问题。 这里有一个更好的答案,并且在github上有很长的讨论,涉及将字典传递给df.columns = df.columns.droplevel(0)方法的全部功能。

不幸的是,这些答案在文档中不存在,但是用于分组,聚合然后重命名列的通用格式使用字典词典。 外字典的键是要聚合的列名。 内部字典具有键,这些键将新列命名为具有值的聚合函数。

在到达那里之前,让我们创建一个四列的DataFrame。

df = pd.DataFrame({'A' : list('wwwwxxxx'),

'B':list('yyzzyyzz'),

'C':np.random.rand(8),

'D':np.random.rand(8)})

A B C D

0 w y 0.643784 0.828486

1 w y 0.308682 0.994078

2 w z 0.518000 0.725663

3 w z 0.486656 0.259547

4 x y 0.089913 0.238452

5 x y 0.688177 0.753107

6 x z 0.955035 0.462677

7 x z 0.892066 0.368850

假设我们要对df.columns = df.columns.droplevel(0)列进行分组,将mean和median合并为C,将max合并为D与max。下面的代码可以做到这一点。

df.groupby(['A', 'B']).agg({'C':['mean', 'median'], 'D':'max'})

D C

max mean median

A B

w y 0.994078 0.476233 0.476233

z 0.725663 0.502328 0.502328

x y 0.753107 0.389045 0.389045

z 0.462677 0.923551 0.923551

这将返回带有分层索引的DataFrame。 最初的问题是有关在同一步骤中重命名列的问题。 使用字典词典可以做到这一点:

df.groupby(['A', 'B']).agg({'C':{'C_mean': 'mean', 'C_median': 'median'},

'D':{'D_max': 'max'}})

D C

D_max C_mean C_median

A B

w y 0.994078 0.476233 0.476233

z 0.725663 0.502328 0.502328

x y 0.753107 0.389045 0.389045

z 0.462677 0.923551 0.923551

这样可以一次性重命名各列,但仍保留可以使用df.columns = df.columns.droplevel(0)删除顶层的层次结构索引。

你可能感兴趣的:(python中rename函数)