首页 > 解决方案 > 对列中具有共同值的行使用网格网格

问题描述

我的数据框:

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

我想a在所有序列中组合来自两个 df 的列中的行,但仅在列中的值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

所以基本上我需要按选定列中的常见行分组bc

标签: pythonpandas

解决方案


您应该使用内部合并尝试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

推荐阅读