让我们考虑以下两个不同的熊猫数据帧 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
是否可以有效地做到这一点?
答案 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