【问题标题】:Pandas Dataframe - rename columns based on the dataframe namePandas Dataframe - 根据数据框名称重命名列
【发布时间】:2019-09-26 01:42:56
【问题描述】:

我想编写一个函数,根据 df 的名称更新 df 的列名。

我有许多具有相同列的 dfs。我最终需要将这些 dfs 合并为一个 df 。为了确定合并后数据的原始来源,我想通过在每个单独的 df first 中将标识符附加到列名来更新列名

我尝试在函数中使用字典 (dict) 来更新列,但无法使其正常工作

我尝试了以下功能:

def update_col(input):

    dict = {'df1': 'A'
            ,'df2': 'B'
            }
    input.rename(columns= {'Col1':'Col1-' + dict[input]
                            ,'Col2':'Col2-' + dict[input]
                            },inplace= True)

我的测试对象是

df1:

Col1  Col2
foo   bah
foo   bah

df2:

Col1  Col2
foo   bah
foo   bah

运行我希望得到的函数如下:

update_col(df1)

df1:

Col1-A  Col2-A
foo     bah
foo     bah

【问题讨论】:

  • 这不是必须的。我正在尝试找到最有效/一致的方法来更新多个数据帧上的列,而无需手动输入每个单独的编辑。我是一个新手,愿意接受任何建议作为最好的方法。关键是能够在我合并 dfs 后识别列的来源,因为每个 df 代表来自不同日期的数据。谢谢

标签: python-3.x pandas dataframe dictionary rename


【解决方案1】:

我认为更好的方法是:

mydict = {'df1': 'A'
        ,'df2': 'B'
        }

d={'df'+str(e+1):i for e,i in enumerate([df1,df2])} #create a dict of dfs

final_d={k:v.add_suffix('-'+v1) for k,v in d.items() for k1,v1 in mydict.items() if k==k1}
print(final_d)

{'df1':   Col1-A Col2-A
0    foo    bah
1    foo    bah, 'df2':   Col1-B Col2-B
0    foo    bah
1    foo    bah}

然后您可以以 final_d['df1'] 等身份访问 dfs。

注意:请不要使用dict作为字典名,因为它是python内置函数

【讨论】:

  • 感谢 anky_91,这太棒了。以后在示例中会更加注意我的字典名称!
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 2020-07-05
  • 2018-12-21
  • 2021-02-03
  • 2021-05-19
  • 2021-05-23
  • 2017-12-03
  • 2022-07-01
相关资源
最近更新 更多