df1:
col1 col2 col3 col4 col5 col6 col7 col8
7865 abc
7269 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 def 5
8726 ghi 1
986 jkl 4
7689 mno
8762 pqr
stu
9698 vwx 2
3568 yz 3将合并工作在这个case..or将很高兴学习任何其他有效的方法以及!!
谢谢!
发布于 2020-04-04 05:26:56
如果没有最后解决方案的任何列的每一行只有一个编号,则应该通过sum、max、min函数对一列进行简化,因此可以使用Series.map。
s = df2.set_index('mapping_value')['Scientific value']
df1['Scientific value'] = df1.iloc[:, :-1].max(axis=1).map(s)
#if empty string are not missing values
#df1['Scientific value'] = df1.iloc[:, :-1].replace('',np.nan).max(axis=1).map(s)如果可能的话,多个值首先由DataFrame.iloc按位置选择,然后由DataFrame.stack重新组合,通过Series.map映射,删除可能丢失的不匹配值和最后的聚合列表:
s = df2.set_index('mapping_value')['Scientific value']
df1['Scientific value'] = (df1.iloc[:, :-1]
.stack()
.map(s)
.dropna()
.groupby(level=0)
.agg(list))https://stackoverflow.com/questions/61024128
复制相似问题