使用合并的pandas数据框中的标头名称进行更改

问题描述 投票:1回答:1

我有一个使用pandas创建的数据透视表(名为'预算')。这看起来如下。

               Current Budget   
Type            C         D
Project Name        
AA            645000     90000
BB            664039     73456
CC            994654     56398
DD            3290090.46 95000

我将这个数据框与另一个数据框合并(名为'ws_project',使用

merged = pd.merge(budgets, ws_project, on=['Project Name'],how='inner')

预算和ws_project具有相同的列['Project Name'],因此我使用此列合并了两个列。

这就是合并数据框的样子

    Project Name    ('Current Budget', 'C') ('Current Budget', 'D') Project Status
0   AA  645000  90000   Active
1   BB  664039  73456   Active
2   CC  994654  56398   Active
3   DD  3290090.46  95000   Active

如您所见,列名称现在是('当前预算','C')和('当前预算','D')。由于某些原因,我不能使用密钥。它带来了一个关键错误。因此,我试图通过替换列名称

merged.columns = merged.columns.str.replace("('Current Budget', 'D')", "")

但是这个命令删除了BOTH('当前预算','D')和('当前预算','C')的标题名称,即使我试图只替换一个。我不明白为什么两者都被删除了。

如果以下两个问题之一得到解答,我想我可以解决我的问题。

  1. 如何删除'预算'中的'当前预算'标题?

budget.iloc [0]表示(AA 645000 90000)的行,而不是“当前预算”。

  1. 如何更改合并数据框中的列名?

merged [“Design_Budget”] = merged [“('当前预算','D')”]带来KeyError:'当前预算'

merged.columns = merged.columns.str.replace()不起作用。它只删除两者的列名。

merged = merged.rename(columns = {“('Current Budget','D')”:“D”,“('当前预算','C')”:“C”})不会改变任何。

pandas dataframe merge header rename
1个回答
1
投票

通常,您应该避免使用任何“特殊字符”给列名​​称,即在语言中具有除字符串之外的含义的字符。

重命名列的最简单方法是使用以下方法

 merged.columns =  ["Project Name","D","C"]

第一个dataFrame有一个分层索引,您也可以删除它

budgets.columns = budgets.columns.get_level_values(0)

但我认为前者更短。

© www.soinside.com 2019 - 2024. All rights reserved.