#python #concatenation #nan #multiple-conditions
#питон #сцепление #nan #множество условий
Вопрос:
У меня есть два столбца в фрейме данных pandas, которые выглядят следующим образом:
кола | Кольб |
---|---|
a | a b c |
b | a c |
c | NaN |
NaN | д е ф |
NaN | NaN |
Я хотел бы объединить ColA и ColB таким образом, чтобы
- если кола находится в ColB, то сохраните ColB
- если КолЫ нет в ColB, объедините их
- если любой из них NaN, то сохраните столбец со значениями
- если оба являются NaN, то сохраните NaN
Как бы я закодировал это на Python таким образом, чтобы желаемый результат выглядел следующим образом:
кола | Кольб | Кольк |
---|---|---|
a | a b c | a b c |
b | a c | в а с |
c | NaN | c |
NaN | д е ф | д е ф |
NaN | NaN | NaN |
Обратите внимание, что » a «представляет слово, а» a b c « представляет три слова в текстовой строке
Ответ №1:
ОБНОВЛЕННЫЙ ответ (с использованием фреймов данных pandas): Хорошо, давайте предположим, что вы это сделали:
import numpy as np import pandas as pd
и ваш фрейм данных выглядит следующим образом:
df ColA ColB 0 a a b c 1 b a c 2 c NaN 3 NaN d e f 4 NaN NaN
Затем вы определяете свою комбинационную функцию:
def concat(row): a = row["ColA"] b = row["ColB"] if not pd.isnull(a) and pd.isnull(b): return a if pd.isnull(a) and not pd.isnull(b): return b if pd.isnull(a) and pd.isnull(b): return np.nan if a in b: return b else: return a b
и примените его к своему фрейму данных (к каждой строке):
df.apply(concat, axis="columns")
что дает такой результат:
0 a b c 1 ba c 2 c 3 d e f 4 NaN dtype: object
Конечно, вы все еще можете подумать о том , хотите ли вы выполнить простое объединение с
помощью in concat
, или вы хотите добавить пробел и т. Д. Вы получаете свой конечный результат,:
df["ColC"] = df.apply(concat, axis="columns")
Конец и конец.
Комментарии:
1. Спасибо, Лукас, я обновил вопрос, чтобы указать, что структура данных представляет собой фрейм данных pandas.
2. @ScottC Я соответствующим образом обновил свой ответ.
3. Большое тебе спасибо, Лукас… Я изменил последнюю строку функции concat на : return a » b, и это дает мне результат, необходимый для вывода в строке 1: b a c , Остальная часть была идеальной. Это сделало именно то, что мне было нужно — спасибо. Я бы поддержал ваш ответ, но у меня недостаточно очков репутации.
4. @ScottC Всегда пожалуйста, сынок.