在Python中查找并连接具有多个列名的数据帧

2024-10-01 07:12:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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                                                                    yz

df2:

Scientific value         mapping_value
1                        8726
2                        9698
3                        3568
4                        986
5                        7269

我想将df1中的“col1、col2、col3、col4、col5、col6、col7”列值与df2中的“mapping_value”列相匹配,并在df1中创建一个名为“Scientific value”的新列,该列将包含来自df2中“Scientific value”列的条目

输出:

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

在这种情况下会合并工作..或者也会很乐意学习任何其他有效的方法

谢谢


Tags: valuedefcol2col3col1df1df2abc
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:37

如果没有最后一个解决方案的任何列的每行只有一个数字,则应简化为一列的summaxmin函数,因此可以使用^{}

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)

如果可能,多个值首先通过^{}按位置选择,然后通过^{}重塑形状,通过^{}映射,删除不匹配值可能缺少的值和最后的聚合列表:

s = df2.set_index('mapping_value')['Scientific value']
df1['Scientific value'] = (df1.iloc[:, :-1]
                              .stack()
                              .map(s)
                              .dropna()
                              .groupby(level=0)
                              .agg(list))

相关问题 更多 >