Dataframes
df1:
col1 col2 col3 col4 col5 col6 col7 col8
7865 abc
7269 689 def
8726 ghi
986 jkl
7689 mno
8762 pqr
stu
9698 vwx
3568 yzdf2:
Scientific value mapping_value
1 8726
2 9698
3 3568
4 986
5 7269我希望将"col1、col2、col3、col4、col5、col6、col7“列值与df2中的"mapping_value”列相匹配,并在df1中创建一个名为“科学值”的新列,该列将在df2中包含“科学价值”列中的条目。
输出:
col1 col2 col3 col4 col5 col6 col7 col8 Scientific value
7865 abc
7269 689 def 5
8726 ghi 1
986 jkl 4
7689 mno
8762 pqr
stu
9698 vwx 2
3568 yz 3谢谢!
发布于 2020-05-15 12:31:47
#Data
df=pd.DataFrame({'col1':[9698, '',''],'col2':['', 7269, ''], 'col3':['','',986]})

df2=pd.DataFrame({'Scientific value':[1,2,3,4],'mapping_value':[9698,7269,986,304]})

#Create dict
d=dict(zip(df2['mapping_value'],df2['Scientific value']))
#Apply dict to dataframe
df.apply(lambda x: x.map(d))结果

发布于 2020-05-15 13:28:10
我注意到:
因为像join这样的东西必须在mapping_value和col之间执行。列,它们必须被带到一个公共类型,例如使用某种辅助对象。
所以,首先要做的是创建一个“映射器”系列。
。
这样做的代码是:
mapper = df2.set_index('mapping_value')['Scientific value']
mapper.index = mapper.index.astype(str); mapper然后定义一个函数以获得科学值( "true“值或”负值“中的空字符串):
def getScVal(row):
rw = row[:-1] # without "col8"
rw = rw[rw != ''].to_frame('code').set_index('code')
res = rw.join(mapper, how='inner')
return res.iloc[0,0] if res.size > 0 else ''若要生成新列,请运行:
df1['Scientific value'] = df1.apply(getScVal, axis=1)https://stackoverflow.com/questions/61818909
复制相似问题