Python 熊猫加入数据帧强制后缀?
如何在合并或联接上强制使用后缀。我知道,如果发生冲突,可以提供一个后缀,但在我的例子中,我正在合并df1和df2,这不会导致任何冲突,但在使用后缀的df2上再次合并,但我更希望每个合并都有一个后缀,因为如果我像你想象的那样进行不同的组合,这会让人感到困惑。你可以强制实际数据帧上的后缀:Python 熊猫加入数据帧强制后缀?,python,pandas,Python,Pandas,如何在合并或联接上强制使用后缀。我知道,如果发生冲突,可以提供一个后缀,但在我的例子中,我正在合并df1和df2,这不会导致任何冲突,但在使用后缀的df2上再次合并,但我更希望每个合并都有一个后缀,因为如果我像你想象的那样进行不同的组合,这会让人感到困惑。你可以强制实际数据帧上的后缀: In [11]: df_a = pd.DataFrame([[1], [2]], columns=['A']) In [12]: df_b = pd.DataFrame([[3], [4]], columns=
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
当已有同名列时,Pandas merge将为新列提供后缀,当我需要使用后缀强制新列时,我将创建一个空列,其中包含我要加入的列的名称
df["colName"] = "" #create empty column
df.merge(right = "df1", suffixes = ("_a","_b"))
您可以稍后删除空列
您可以对多个列或df.columns.values中的每一列执行相同的操作这是我用来
pandas.merge
两个数据帧并强制后缀的操作:
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)
从0.24.2版开始,您可以使用以下方法为数据帧上的列名添加后缀 这使得带有强制后缀的一行合并命令更容易接受,例如:
df_merged=df1.merge(df2.add_后缀(“_2”))
为什么不将df1和df2合并或附加在一起,而是重命名df2中的冲突列,以便识别原始数据的来源?请参阅我的答案,了解使用0.24.2中添加的更新版本。我现在正在执行此操作。我想最后,保存步骤并为join/merge函数提供后缀会更好。我将把这个标记为正确答案。谢谢。不用使用lambda
,只需添加到列索引--df_a.columns+=“_a”
,如果它们都是字符串。或者添加df_a.columns.astype(“str”)+“_a”
,如果不是的话。@DSM会在适当的位置修改列名称吗?我的目标不是就地修改,而是临时修改them@stgtscc当前位置它将做与安迪的回答完全相同的事情。如果您想更改不在适当位置的列名,可以执行df_a.rename(columns=lambda x:x+“_a”).join(df_b.rename(columns=lambda x:x+“_b”)
或其他操作。这将是在pandas中合并的一个不错的添加。但是,在合并之前,您会遇到列名更改的问题