Pandas объединить две строки, игнорировать значения nan
У меня есть два столбца со строками. Я хотел бы объединить их и игнорировать значения nan
. Таким образом:
ColA, Colb, ColA+ColB
str str strstr
str nan str
nan str str
Я пробовал df['ColA+ColB'] = df['ColA'] + df['ColB']
, но это создает значение nan, если любой столбец - nan. Я также думал об использовании concat
.
Я полагаю, я мог бы просто пойти с этим, а затем использовать некоторые df.ColA+ColB[df[ColA] = nan] = df[ColA]
, но это похоже на обходной путь.
Ответы
Ответ 1
Вызвать fillna
и передать пустую строку в качестве значения заполнения, а затем sum
с помощью param axis=1
:
In [3]:
df = pd.DataFrame({'a':['asd',np.NaN,'asdsa'], 'b':['asdas','asdas',np.NaN]})
df
Out[3]:
a b
0 asd asdas
1 NaN asdas
2 asdsa NaN
In [7]:
df['a+b'] = df.fillna('').sum(axis=1)
df
Out[7]:
a b a+b
0 asd asdas asdasdas
1 NaN asdas asdas
2 asdsa NaN asdsa
Ответ 2
Вы можете заполнить NaN пустой строкой:
df['ColA+ColB'] = df['ColA'].fillna('') + df['ColB'].fillna('')
Ответ 3
Используя apply
и str.cat
, вы можете
In [723]: df
Out[723]:
a b
0 asd asdas
1 NaN asdas
2 asdsa NaN
In [724]: df['a+b'] = df.apply(lambda x: x.str.cat(sep=''), axis=1)
In [725]: df
Out[725]:
a b a+b
0 asd asdas asdasdas
1 NaN asdas asdas
2 asdsa NaN asdsa
Ответ 4
Предпочитаю добавлять столбцы, чем использовать метод apply
. Потому что это быстрее, чем apply
.
-
Просто добавьте два столбца (если вы знаете, что это строки)
%timeit df.bio + df.procedure_codes
21,2 мс ± 1,53 мс на цикл (среднее ± стандартное отклонение из 7 циклов, по 10 циклов в каждом)
-
Используйте применить
%timeit df[eventcol].apply(lambda x: ''.join(x), axis=1)
13,6 с ± 343 мс на цикл (среднее ± стандартное отклонение из 7 циклов, по 1 циклу каждый)
-
Используйте строковые методы Pandas и cat:
%timeit df[eventcol[0]].str.cat(cols, sep=',')
264 мс ± 12,3 мс на цикл (среднее ± стандартное отклонение из 7 циклов, по 1 циклу каждый)
-
Использование суммы (которая объединяет строки)
%timeit df[eventcol].sum(axis=1)
509 мс ± 6,03 мс на цикл (среднее ± стандартное отклонение из 7 циклов, по 1 циклу каждый)
смотрите здесь для дополнительных тестов