我的数据框:
df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 2, 3], [7, 8, 8]]),columns=['a', 'b', 'c'])
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 2, 3], [5, 8, 8]]),columns=['a', 'b', 'c'])
df1,df2:
a b c
0 1 2 3
1 4 2 3
2 7 8 8
a b c
0 1 2 3
1 4 2 3
2 5 8 8
我要合并所有序列中两个df的列a
中的行,但仅在列b
和c
中的值相等的情况下进行合并。
现在,我只能使用以下代码解决所有问题:
x = np.array(np.meshgrid(df1.a.values,
df2.a.values)).T.reshape(-1,2)
df = pd.DataFrame(x)
print(df)
0 1
0 1 1
1 1 4
2 1 5
3 4 1
4 4 4
5 4 5
6 7 1
7 7 4
8 7 5
df1.a and df2.a
的预期输出仅适用于df1.b==df2.b and df1.c==df2.c
的行:
0 1
0 1 1
1 1 4
2 4 1
3 4 4
4 7 5
所以基本上我需要按选定列b
和c
中的公用行进行分组
答案 0 :(得分:1)
您应该使用内部合并尝试DataFrame.merge:
df1.merge(df2, on=['b', 'c'])[['a_x', 'a_y']]
a_x a_y
0 1 1
1 1 4
2 4 1
3 4 4
4 7 5