我有一个使用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')的标题名称,即使我试图只替换一个。我不明白为什么两者都被删除了。
如果以下两个问题之一得到解答,我想我可以解决我的问题。
budget.iloc [0]表示(AA 645000 90000)的行,而不是“当前预算”。
merged [“Design_Budget”] = merged [“('当前预算','D')”]带来KeyError:'当前预算'
merged.columns = merged.columns.str.replace()不起作用。它只删除两者的列名。
merged = merged.rename(columns = {“('Current Budget','D')”:“D”,“('当前预算','C')”:“C”})不会改变任何。
通常,您应该避免使用任何“特殊字符”给列名称,即在语言中具有除字符串之外的含义的字符。
重命名列的最简单方法是使用以下方法
merged.columns = ["Project Name","D","C"]
第一个dataFrame有一个分层索引,您也可以删除它
budgets.columns = budgets.columns.get_level_values(0)
但我认为前者更短。