Как объединить два столбца в один в pandas? - PullRequest
0 голосов
/ 28 мая 2020

По сути, у меня есть два столбца, которые я хочу объединить вместе с определенными правилами. Используя следующий код, я построил аналогичный фрейм данных.

primaryColumn = pd.Series(["Orange", np.nan, np.nan, "Cyan"])
secondaryColumn = pd.Series(["Red", "Green", np.nan, "Blue"])

pd.concat([secondaryColumn, primaryColumn], axis=1)

enter image description here

Я в основном хочу сохранить все, что находится в столбце 1, перенести все, что в столбце 0, чтобы заменить любые значения nan, а затем сохранить любые значения nan, которые находятся в обоих столбцах. В результате должен появиться столбец со следующими значениями:

0 Оранжевый 1 Зеленый 2 NaN 3 Голубой

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

Ответы [ 4 ]

2 голосов
/ 28 мая 2020

Это больше похоже на fillna

s=primaryColumn.fillna(secondaryColumn)
s
0    Orange
1     Green
2       NaN
3      Cyan
dtype: object
1 голос
/ 28 мая 2020

попробуйте это ...

df.loc[df['1'].isnull(),'1'] = df['0']
0 голосов
/ 28 мая 2020

Предположим, что вы объединили свои 2 источника Series в DataFrame, и у вас есть:

       0       1
0    Red  Orange
1  Green     NaN
2    NaN     NaN
3   Blue    Cyan

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

def lastValid(row):
    ind = row[::-1].first_valid_index()
    return row[ind] if pd.notnull(ind) else np.nan

Затем примените эту функцию, сохранив результат в новом столбце:

df[2] = df.apply(lastValid, axis=1)

Результат:

       0       1       2
0    Red  Orange  Orange
1  Green     NaN   Green
2    NaN     NaN     NaN
3   Blue    Cyan    Cyan

Или, если вы хотите перезаписать 1 столбец, вместо создания нового столбца измените 2 на 1 .

Это работает также, когда у вас больше исходных столбцов, единственной деталью будет правильное имя выходного столбца.

0 голосов
/ 28 мая 2020

заполнить вперед по оси столбцов

df.ffill(axis=1)

     0        1
0   Red     Orange
1   Green   Green
2    NaN    NaN
3   Blue    Cyan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...