更改重复列的名称

时间:2019-10-30 21:35:39

标签: python pandas dataframe

我正在尝试更改数据框中一组重复列的列名。经过一堆预处理后,我从两个不同的csv文件形成了数据框。

merged_df.columns是这个:

Index(['PortfolioID', 'FirmID', 'PC_City', 'PC_State', 'PC_Country',
   'Investment_Date', 'Exit_Date', 'Transaction_Comments', 'PC_City', 
   'PC_State', 'PC_Country',
   'fundSize'],
  dtype='object')

第一组PC_City, PC_State, PC_Country用于投资组合公司,下一组swagger-ui-dist用于公司。我尝试了this,但将两个集合设为相同。然后我看到了this,但是只有在导入csv时才能完成。 This不会重复。

有什么办法可以实现? Mod,请帮助进行编辑。

2 个答案:

答案 0 :(得分:1)

您可以尝试在重复项上添加firm

duplicates = merged_df.columns.duplicated()

merged_df.columns = [x+'_firm' if i else x for x, i in zip(merged_df.columns, duplicates)]

输出:

Index(['PortfolioID', 'FirmID', 'PC_City', 'PC_State', 'PC_Country',
       'Investment_Date', 'Exit_Date', 'Transaction_Comments', 'PC_City_firm',
       'PC_State_firm', 'PC_Country_firm', 'fundSize'],
      dtype='object')

但是,从您的命名出发,您应该考虑将suffixes=('portfolio', 'firm')传递到创建merge的{​​{1}}函数中。

答案 1 :(得分:0)

假设您要向列的重复值添加_Firms

示例:

df.columns

Out[372]:
Index(['PortfolioID', 'FirmID', 'PC_City', 'PC_State', 'PC_Country',
       'Investment_Date', 'Exit_Date', 'Transaction_Comments', 'PC_City',
       'PC_State', 'PC_Country', 'fundSize'],
      dtype='object')

您可以将whereduplicated一起使用,如下所示:

cols = df.columns
df.columns = cols.where(~cols.duplicated(), cols + '_Firms')

print(df.columns)

Out[380]:
Index(['PortfolioID', 'FirmID', 'PC_City', 'PC_State', 'PC_Country',
       'Investment_Date', 'Exit_Date', 'Transaction_Comments', 'PC_City_Firms',
       'PC_State_Firms', 'PC_Country_Firms', 'fundSize'],
      dtype='object')