合并pandas DataFrame并返回带有列名的公共值

时间:2019-03-31 11:10:25

标签: python pandas dataframe

让我们考虑以下两个不同的熊猫数据帧 df1 df2 。 此练习包括逐行比较所有列,并返回两个数据帧中相同的值以及列名。

让我们举个例子来更好地理解。让我们假设以下数据帧:

df1 = pd.DataFrame([[23,12,44],[34,55,33]], columns = ['A', 'B', 'C'])
df2 = pd.DataFrame([[11,12,43],[10,51,34]], columns = ['D', 'E', 'F'])

操作结果应为:

   col   value
0   E    12
1   F    34

是否可以有效地做到这一点?

1 个答案:

答案 0 :(得分:3)

我们可以使用pd.melt将列移至行,然后执行inner merge

df1_melt = df1.melt(value_vars=df1.columns, var_name='Cols')
df2_melt = df2.melt(value_vars=df2.columns, var_name='Cols')

df_final = pd.merge(df2_melt, df1_melt, on='value', suffixes=['', '_1']).drop('Cols_1', axis=1)

print(df_final)
  Cols  value
0    E     12
1    F     34

编辑:中间融化的表格如下所示:

print(df1_melt, '\n')
print(df2_melt)

  Cols  value
0    A     23
1    A     34
2    B     12
3    B     55
4    C     44
5    C     33 

  Cols  value
0    D     11
1    D     10
2    E     12
3    E     51
4    F     43
5    F     34