我想两个合并这两个数据帧:
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
有人可以帮助我吗?
答案 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