#python #pandas
#python #pandas
Вопрос:
ВХОД>df1
ColumnA ColumnB
A1 NaN
A1A2 NaN
A3 NaN
Что я пытался сделать, так это условно изменить значение столбца B,
на основе итерации проверки ColumnA, добавление замечаний к столбцу B.
Предыдущее значение столбца B должно быть сохранено после добавления новой строки.
В примере фрейма данных то, что я хочу сделать, было бы
- Если столбец содержит A1. Если это так, добавьте строку «A1» в столбец B (без очистки всех предыдущих значений.)
- Если столбец содержит A2. Если это так, добавьте строку «A2» в столбец B (без очистки всех предыдущих значений.)
ВЫВОД>df1
ColumnA ColumnB
A1 A1
A1A2 A1_A2
A3 NaN
Я пробовал следующие коды, но они плохо работают.
Кто-нибудь может дать мне несколько советов? Спасибо.
df1['ColumnB'] = np.where(df1['ColumnA'].str.contains('A1'), df1['ColumnB'] "_A1",df1['ColumnB'])
df1['ColumnB'] = np.where(df1['ColumnA'].str.contains('A2'), df1['ColumnB'] "_A2",df1['ColumnB'])
Ответ №1:
Один из способов использования pandas.Series.str.findall
с join
:
key = ["A1", "A2"]
df["ColumnB"] = df["ColumnA"].str.findall("|".join(key)).str.join("_")
print(df)
Вывод:
ColumnA ColumnB
0 A1 A1
1 A1A2 A1_A2
2 A3
Ответ №2:
Вы не можете добавлять или дописывать строки к np.nan
. Это означает, что вам всегда нужно будет проверять, является ли какая-либо позиция в вашем ColumnB
по-прежнему np.nan
или уже является строкой, чтобы правильно установить ее новое значение. Если все, что вы хотите сделать, это работать с текстом, вы можете инициализировать свои ColumnB
пустые строки и добавить выбранные фрагменты строк из ColumnA
как:
import pandas as pd
import numpy as np
I = pd.DataFrame({'ColA': ['A1', 'A1A2', 'A2', 'A3']})
I['ColB'] = ''
I.loc[I.ColA.str.contains('A1'), 'ColB'] = 'A1'
print(I)
I.loc[I.ColA.str.contains('A2'), 'ColB'] = 'A2'
print(I)
Результат таков:
ColA ColB
0 A1 A1
1 A1A2 A1
2 A2
3 A3
ColA ColB
0 A1 A1
1 A1A2 A1A2
2 A2 A2
3 A3
Примечание: это очень подробная версия в качестве примера.
Комментарии:
1. Решено! Как вы упомянули, проблема возникла из-за добавления строк в np.nan