【问题标题】:Merging 3 databases with same names, and renaming them in python合并3个同名数据库,并在python中重命名
【发布时间】:2018-04-02 14:45:19
【问题描述】:

我有 3 个 df,每个 25 列。 3 df 中的所有列都相同。

我想合并3个df,将df1的25列的列名改为“_a”,df2的25列改为“_b”,df3的25列改为“_c”。

我正在使用以下代码:

pd.merge(pd.merge(df1,df2,'left',on='year',suffixes=['_a','_b']),df3,'left',on='year')

如何使用重命名或其他函数来更改上述代码中 df3 的所有 25 列?

谢谢。

【问题讨论】:

    标签: python pandas dataframe merge rename


    【解决方案1】:
    pd.merge(pd.merge(df1,df2,'left',on='year',suffixes=['_a','_b']),
             df3,'left',on='year',suffixes=['','_c'])
    

    另一种方法:

    源 DF:

    In [68]: d1
    Out[68]:
       col1  col2  col3
    0     1     2     3
    1     4     5     6
    
    In [69]: d2
    Out[69]:
       col1  col2  col3
    0    11    12    13
    1    14    15    16
    
    In [70]: d3
    Out[70]:
       col1  col2  col3
    0    21    22    23
    1    24    25    26
    

    让我们创建一个 DF 列表:

    In [71]: dfs = [d1,d2,d3]
    

    以及后缀列表:

    In [73]: suffixes = ['_a','_b','_c']
    

    现在我们可以像下面这样一步合并它们:

    In [74]: pd.concat([df.add_suffix(suffixes[i]) for i,df in enumerate(dfs)], axis=1)
    Out[74]:
       col1_a  col2_a  col3_a  col1_b  col2_b  col3_b  col1_c  col2_c  col3_c
    0       1       2       3      11      12      13      21      22      23
    1       4       5       6      14      15      16      24      25      26
    

    简短说明:在列表推导中,我们正在生成一个包含已重命名列的 DF 列表:

    In [75]: [suffixes[i] for i,df in enumerate(dfs)]
    Out[75]: ['_a', '_b', '_c']
    
    In [76]: [df.add_suffix(suffixes[i]) for i,df in enumerate(dfs)]
    Out[76]:
    [   col1_a  col2_a  col3_a
     0       1       2       3
     1       4       5       6,    col1_b  col2_b  col3_b
     0      11      12      13
     1      14      15      16,    col1_c  col2_c  col3_c
     0      21      22      23
     1      24      25      26]
    

    【讨论】:

    • 很棒的演示,甚至在编辑之前! List Comprehensions 经常让那些刚接触 python 的人感到困惑,所以他们通常需要一个小的解释或说明。尽管如此,你的答案是清晰而简洁的。 +1
    • 谢谢! pd.merge(pd.merge(df1,df2,'left',on='year',suffixes=['_a','_b']), df3,'left',on='year',suffixes=[ '','_c']) 不起作用,因为我猜数据框的列应该是相同的(注意-合并 2 dfs 将列更改为“_a”和“_b”,因此它们与 df3 不同。如何我可以使用重命名函数来更改第三个 df 的后缀吗?
    • 也许你可以试试reduce(lambda x, y: pd.merge(x, y, on = 'year'), l)
    • @Wen,这是一个好主意——把它变成一个答案。
    猜你喜欢
    • 2018-04-05
    • 2021-01-17
    • 2022-06-20
    • 2021-06-21
    • 1970-01-01
    • 2020-06-18
    • 2021-12-17
    • 2011-03-23
    相关资源
    最近更新 更多