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
.