我有两个Pandas DataFrames; df1
有两列,分别为A
和B
,看起来像:
df1=pd.DataFrame(data={'A':[10,30], 'B':[5,4]})
A B
10 5
30 4
df2
有两列B
和C
,看起来像:
df2=pd.DataFrame(data={'B':[4,7], 'B':[10,20]})
B C
4 10
7 20
我想根据df1.A
是否匹配df1.B
来修改df2.B
。如果是这样,df1.A
应该除以df2.C
。即,我想通过前面提到的df1
和df2
得到以下内容:
A B
10 5
3 4
Python是否有单行解决方案?
答案 0 :(得分:3)
这实际上是merge
,需要进行一些操作:
(df1.merge(df2, on='B', how='left')
.assign(C=lambda x: x.C.fillna(1)) # those don't match has `C` value `1`
.assign(A=lambda x: x.A/x.C) # divide by `C` value
.drop('C', axis=1) # remove the `C` column
)
输出:
A B
0 10.0 5
1 3.0 4
答案 1 :(得分:1)
map
d = dict(zip(df2.B, df2.C))
f = lambda x: d.get(x, 1)
df1.assign(A=df1.A / df1.B.map(f))
A B
0 10.0 5
1 3.0 4