pandas加入DataFrame强制后缀?

时间:2014-02-05 21:22:47

标签: python pandas

如何在合并或加入时强制使用后缀。我知道如果碰撞有可能提供一个,但在我的情况下我将df1与df2合并,这不会引起任何碰撞但是再次合并使用后缀的df2但是我希望每个合并都有一个后缀因为如果我按照你的想象做不同的组合会让人感到困惑。

4 个答案:

答案 0 :(得分:20)

您可以在实际的DataFrame上强制使用后缀:

In [11]: df_a = pd.DataFrame([[1], [2]], columns=['A'])

In [12]: df_b = pd.DataFrame([[3], [4]], columns=['B'])

In [13]: df_a.join(df_b)
Out[13]: 
   A  B
0  1  3
1  2  4

通过附加列的名称:

In [14]: df_a.columns = df_a.columns.map(lambda x: str(x) + '_a')

In [15]: df_a
Out[15]: 
   A_a
0    1
1    2

现在连接不需要后缀校正,无论它们是否发生碰撞:

In [16]: df_b.columns = df_b.columns.map(lambda x: str(x) + '_b')

In [17]: df_a.join(df_b)
Out[17]: 
   A_a  B_b
0    1    3
1    2    4

答案 1 :(得分:1)

当已经有一个具有相同名称的列时,Pandas merge将为新列提供后缀。当我需要强制带有后缀的新列时,我创建一个空列,其中包含我想要的列的名称加入。

df["colName"] = "" #create empty column 
df.merge(right = "df1", suffixes = ("_a","_b"))

您可以稍后删除空列。

您可以为多个列或df.columns.values中的每一列执行相同操作

答案 2 :(得分:0)

我正在使用pandas.merge两个DataFrame并强制使用后缀:

def merge_force_suffix(left, right, **kwargs):
    on_col = kwargs['on']
    suffix_tupple = kwargs['suffixes']

    def suffix_col(col, suffix):
        if col != on_col:
            return str(col) + suffix
        else:
            return col

    left_suffixed = left.rename(columns=lambda x: suffix_col(x, suffix_tupple[0]))
    right_suffixed = right.rename(columns=lambda x: suffix_col(x, suffix_tupple[1]))
    del kwargs['suffixes']
    return pd.merge(left_suffixed, right_suffixed, **kwargs)

答案 3 :(得分:0)

从pandas版本0.24.2开始,您可以使用add_suffix方法在DataFrame的列名称上添加后缀。

这使带有强制后缀的单线合并命令更易于使用,例如:


df_merged = df1.merge(df2.add_suffix('_2'))