我有两个 df - df_a 和 df_b,
# df_a
number cur code
1000 USD 700
2000 USD 800
3000 USD 900
# df_b
number amount deletion code
1000 0.0 L 700
1000 10.0 X 700
1000 10.0 X 700
2000 20.0 X 800
2000 20.0 X 800
3000 0.0 L 900
3000 0.0 L 900
我想离开合并df_a
with df_b
,
df_a = df_a.merge(df_b.loc[df_b.deletion != 'L'], how='left', on=['number', 'code'])
并且创建一个名为deleted
在合并结果中df_a
,具有三个可能的值 - 完整、部分和无;
full
- 如果所有行都与特定的number
值,有deletion
= L;
partial
- 如果某些行与特定的number
值,有deletion
= L;
none
- 没有与特定关联的行number
值,有deletion
= L;
此外,在进行合并时,来自的行df_b
with deletion
= L 不应考虑;所以结果看起来像
number amount deletion deleted cur code
1000 10.0 X partial USD 700
1000 10.0 X partial USD 700
2000 20.0 X none USD 800
2000 20.0 X none USD 800
3000 0.0 NaN full USD 900
I tried,
g = df_b['deletion'].ne('L').groupby([df_b['number'], df_b['code']])
m1 = g.any()
m2 = g.all()
d1 = dict.fromkeys(m1.index[m1 & ~m2], 'partial')
d2 = dict.fromkeys(m2.index[m2], 'full')
d = {**d1, **d2}
df_a = df_a.merge(df_b.loc[df_b.deletion != 'L'], how='left', on=['code', 'number'])
df_a['deleted'] = df_a[['number', 'code']].map(d).fillna('none')
但我得到一个错误,
AttributeError: 'DataFrame' object has no attribute 'map'
它似乎df
不具有map
函数,所以我想知道是否有其他方法可以实现此目的。