В настоящее время у меня есть датафрейм, который выглядит следующим образом:

col1  col2  col3
 1      2     3
 2      3     NaN
 3      4     NaN
 2      NaN   NaN
 0      2     NaN

То, что я хочу сделать, это применить некоторые условия к значениям столбца и вернуть окончательный результат в новом столбце.

Условием является присвоение значений на основе этого порядка приоритетов, где 2 является первым приоритетом: [2,1,3,0,4]

Я пытался определить функцию, чтобы добавить окончательные результаты, но на самом деле ничего не получалось ... какие-нибудь мысли?

Желаемый результат будет выглядеть примерно так:

col1  col2  col3  col4
 1     2     3     2
 2     3     NaN   2
 3     4    NaN    3
 2     NaN   NaN   2
 0     2    NaN    2

Где col4 - новый созданный столбец.

Спасибо

0
NZ_DJ 25 Сен 2018 в 10:38

2 ответа

Лучший ответ

Сначала вы можете избавиться от NaNs:

df.fillna(5)

А затем примените функцию к каждой строке, чтобы найти ваше значение:

def func(x,l=[2,1,3,0,4,5]):
    for j in l:
      if(j in x):
         return j

df['new'] = df.apply(lambda x: func(list(x)),axis =1)

< Сильный > Выход :

     col1   col2    col3    new
  0   1      2        3      2    
  1   2      3        5      2
  2   3      4        5      3
  3   2      5        5      2
  4   0      2        5      2
1
Frayal 25 Сен 2018 в 08:16

Может чуть позже.

import numpy as np
def f(x):
    for i in [2,1,3,0,4]:
        if i in x.tolist():
            return i
    return np.nan
df["col4"] = df.apply(f, axis=1)

И вывод:

   col1  col2  col3  col4
0     1   2.0   3.0     2
1     2   3.0   NaN     2
2     3   4.0   NaN     3
3     2   NaN   NaN     2
4     0   2.0   NaN     2
0
Hsgao 25 Сен 2018 в 08:20