合并基于组熊猫的两个数据框

时间:2020-04-27 09:44:00

标签: python pandas

我想两个合并这两个数据帧:

df1
    a   b   c                              
4   0   1   3
5   0   1   3
6   0   1   3
2   1   2   2
3   1   2   2
15  2   1   3
12  2   1   3
13  2   1   3
15  3   1   4
14  3   1   4
8   3   1   4
9   3   1   4
df2

b  c  e
1  3  2
1  3  0
1  3  1

df1应该按a分组,如果在a的一组中相等,则应与df2合并。 合并/加入后,它应如下所示:

    a   b   c   e                              
4   0   1   3   2
5   0   1   3   0
6   0   1   3   1
2   1   2   2   nan
3   1   2   2   nan
15  2   1   3   2
12  2   1   3   0
13  2   1   3   1
15  3   1   4   nan
14  3   1   4   nan
8   3   1   4   nan
9   3   1   4   nan

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您实际上并不想合并,因为当3列的2列值是通用的时,您想复制 3 行的值。

我将使用一个专用函数来控制一个组确实包含与df2一样多的行,并且值是相同的:

def tst(x):
    if len(x) != 3: return False
    x = x.reset_index()[['b', 'c']]
    return (x == df2[['b', 'c']]).all().all()

然后我们可以写:

new_col = df1.groupby('a').apply(lambda x: df2['e'] if tst(x) else pd.Series(
    pd.np.nan, index = x.index))

答案 1 :(得分:-1)

new_df = pd.merge(df1, df2,  how='left', left_on=['b','c'], right_on = ['b','c'])

这应该适合您的情况。 Doc link