Python 在数据帧上匹配和重命名列

Python 在数据帧上匹配和重命名列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1: df2: 我已使用下表中的 df1 df2 Drive Drive_1 Volume 2Volume Reps Reps 使用表中的映射,如何将df2中的所有列重命名为与df1相同 我可以使用一个简单的df2=df2.rename(columns={old:new})手动执行此操作。但是我想使用可以处理不同列名的通用代码。也许这会有所帮助 df2.columns = df1.columns 如果要动态创建类似列的映

我有两个数据帧:

df1:

df2:

我已使用下表中的

    df1    df2
   Drive   Drive_1
   Volume  2Volume
   Reps    Reps   
使用表中的映射,如何将df2中的所有列重命名为与df1相同

我可以使用一个简单的df2=df2.rename(columns={old:new})手动执行此操作。但是我想使用可以处理不同列名的通用代码。

也许这会有所帮助

df2.columns = df1.columns
如果要动态创建类似列的映射dict,可以使用
difflib

import difflib
col1 = ['ID', 'Drive','Volume','Rep'] # df1.columns.values
col2 = [ 'ID', '2Volume', 'Drive_1', 'Reps']  # df2.columns.values
col_dict = {difflib.get_close_matches(col, col2)[0]:col for col in col1}
在运行上述代码之后,您将有一个这样的dict-

{'ID': 'ID', 'Drive_1': 'Drive', '2Volume': 'Volume', 'Reps': 'Rep'}

当您说不想做
df2=df2时,可以使用上面的dict映射列。手动重命名(columns={old:new})
,您的意思是要从
自动提取
旧的
新的
?如果是这样,您可以这样做:

df2=df2.rename(columns=dict(zip(table.df2,table.df1)))
#ID驱动器卷重复
# 0   1      2       3     4
或:

df2=df2.rename(columns=table.set_index('df2').df1)

这将不知道如何匹配列tho。请记住,列可以是任意顺序和任意名称。第一步是映射df1中要分配给哪些列名df2@tjjudge谢谢:)。我更新了我的答案。我喜欢这个概念,但它似乎不起作用。是的,我理解,但出于某种原因。。列名没有改变。虽然没有error@tjjudge嗯,也许在你的真实世界中,在
df1
/
df2
列名中或者
表的
值中(或者你是说即使这个示例对你也不起作用)会出现另一个类似于我目前使用的数据集的问题。如果可以的话,请看一下@tdy
import difflib
col1 = ['ID', 'Drive','Volume','Rep'] # df1.columns.values
col2 = [ 'ID', '2Volume', 'Drive_1', 'Reps']  # df2.columns.values
col_dict = {difflib.get_close_matches(col, col2)[0]:col for col in col1}
{'ID': 'ID', 'Drive_1': 'Drive', '2Volume': 'Volume', 'Reps': 'Rep'}