Объединение столбцов на основе значений в нескольких столбцах панд - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть DataFrame следующим образом:

   Name  Col2        Col3
0  A     16-1-2000   NaN
1  B     13-2-2001   NaN
2  C     NaN         NaN
3  D     NaN         23-4-2014
4  X     NaN         NaN
5  Q     NaN         4-5-2009

Я хочу создать комбинированный столбец на основе данных либо Col2 & Col3, так что это даст мне следующий вывод.

   Name  Col2        Col3      Result
0  A     16-1-2000   NaN       16-1-2000
1  B     13-2-2001   NaN       13-2-2001
2  C     NaN         NaN       NaN
3  D     NaN         23-4-2014 23-4-2014
4  X     NaN         NaN       NaN
5  Q     NaN         4-5-2009  4-5-2009

Я пробовал следующее:

df['Result'] = np.where(df["Col2"].isnull() & df["Col3"].isnull(), np.nan, df["Col2"] if dfCrisiltemp["Col2"].notnull() else df["Col3"])

но безуспешно.

1 Ответ

0 голосов
/ 04 сентября 2018

Использование combine_first или fillna:

df['new'] = df["Col2"].combine_first(df["Col3"])
#alternative
#df['new'] = df["Col2"].fillna(df["Col3"])
print (df)
  Name       Col2       Col3        new
0    A  16-1-2000        NaN  16-1-2000
1    B  13-2-2001        NaN  13-2-2001
2    C        NaN        NaN        NaN
3    D        NaN  23-4-2014  23-4-2014
4    X        NaN        NaN        NaN
5    Q        NaN   4-5-2009   4-5-2009

Ваше решение должно быть изменено на другое np.where:

df['new'] = np.where(df["Col2"].notnull() & df["Col3"].isnull(), df["Col2"],
            np.where(df["Col2"].isnull() & df["Col3"].notnull(), df["Col3"], np.nan))

Или numpy.select:

m1 = df["Col2"].notnull() & df["Col3"].isnull()
m2 = df["Col2"].isnull() & df["Col3"].notnull()
df['new'] = np.select([m1, m2], [df["Col2"], df["Col3"]], np.nan)

Для общего решения отфильтруйте все столбцы без первого по iloc, прямую заливку NaN с и последний выберите последний столбец:

df['new'] = df.iloc[:, 1:].ffill(axis=1).iloc[:, -1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...