Python: создайте новый столбец из существующих столбцов

Я пытаюсь создать новый столбец на основе обоих столбцов. Скажем, я хочу создать новый столбец z, и это должно быть значение y, когда оно не отсутствует, и значение x, когда y действительно отсутствует. Поэтому в этом случае я ожидаю, что z будет [1, 8, 10, 8].

   x   y
0  1 NaN
1  2   8
2  4  10
3  8 NaN

6 ответов


новая колонка 'z' получить значения из столбца 'y' используя df['z'] = df['y']. Это приводит к отсутствующим значениям, поэтому заполните их с помощью fillna через колонки 'x'. Цепочка этих двух действий:

>>> df['z'] = df['y'].fillna(df['x'])
>>> df
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8

можно использовать apply с опцией axis=1. Тогда ваше решение довольно лаконично.

df[z] = df.apply(lambda row: row.y if pd.notnull(row.y) else row.x, axis=1)

использовать np.where:

In [3]:

df['z'] = np.where(df['y'].isnull(), df['x'], df['y'])
df
Out[3]:
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8

здесь он использует логическое условие, и если значение true возвращает df['x'] else df['y']


предположим, что DataFrame называется df. Сначала скопируйте .

df["z"] = df["y"].copy()

затем установите nan местоположения z в местах в x, где nans находятся в z.

import numpy as np
df.z[np.isnan(df.z)]=df.x[np.isnan(df.z)]


>>> df 
   x   y   z
0  1 NaN   1
1  2   8   8
2  4  10  10
3  8 NaN   8

Я не уверен, что понимаю вопрос, но будет ли это то, что вы ищете?

" if y[i] " пропустит, если значение равно none.

for i in range(len(x));
    if y[i]:
        z.append(y[i])
    else:
        z.append(x[i])

на update метод делает почти точно это. Единственное предостережение-это update сделает это на месте, поэтому вы должны сначала создать копию:

df['z'] = df.x.copy()
df.z.update(df.y)

В приведенном выше примере вы начинаете с x и замените каждое значение соответствующим значением из y, пока новое значение не NaN.