映射修改后的熊猫

时间:2020-01-13 20:39:02

标签: python pandas dataframe

我有两个Pandas DataFrames; df1有两列,分别为AB,看起来像:

df1=pd.DataFrame(data={'A':[10,30], 'B':[5,4]})
A    B
10   5
30   4

df2有两列BC,看起来像:

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。即,我想通过前面提到的df1df2得到以下内容:

A    B
10   5
3    4

Python是否有单行解决方案?

2 个答案:

答案 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