Поиск и объединение фреймов данных с несколькими именами столбцов в Python - PullRequest
2 голосов
/ 04 апреля 2020

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

Я хочу соответствовать "col1, col2, col3, col4, col5, col6, col7 "значения столбца в df1 со столбцом" mapping_value "в df2 и создать новый столбец с именем" Scientifi c value "в df1, который будет содержать записи из столбца" Scientifi c value "в 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

Слился бы с работой в этом случае ... или был бы рад изучить любой другой эффективный метод !!

Спасибо!

1 Ответ

1 голос
/ 04 апреля 2020

Если для каждого из столбцов без последнего решения есть только одно число в строках, следует упростить функцию 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...