Как объединить данные из двух столбцов в один со знаком + с помощью панд - PullRequest
1 голос
/ 09 апреля 2019

У меня есть 2 столбца в этом формате в формате CSV.

Drug    Product(Predicted)
#N/A    acetaldehyde
#N/A    nicotine
#N/A    resin
#N/A    rosa
#N/A    eliglustat
#N/A    valpromide
#N/A    clostridium
#N/A    ambenonium
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
solution    valpromide
#N/A    amiloride
#N/A    valsartán
#N/A    manitol
#N/A    hipromelosa
#N/A    fosfato disódico
#N/A    fosfato disódico
#N/A    agalsidase beta
#N/A    enoxaparin sodium
solution    warfarine
#N/A    eliglustat
#N/A    silver
#N/A    silver

Вывод, который я ищу, заключается в том, что создайте новый столбец и, когда в столбце препарата есть запись (игнорируйте все N / A), добавьте эту запись в новый столбец, объединяя 2 столбца с плюсом войдите и получите вывод csv

Например:

New column
solution + valpromide
solution + valpromide
solution + warfarine

Я новичок в пандах, поэтому я хотел знать, как это можно сделать, используя тот же

Ответы [ 2 ]

2 голосов
/ 09 апреля 2019

Используйте Series.str.cat с Series.str.strip:

df['new'] = df['Drug'].str.cat(df['Product(Predicted)'], na_rep='', sep='+').str.strip('+')

Или замените пропущенные значения пустыми строками перед объединением:

df['new'] = (df['Drug'].fillna('') + '+' + df['Product(Predicted)']).str.strip('+')

print (df)
       Drug Product(Predicted)                  new
0       NaN       acetaldehyde         acetaldehyde
1       NaN           nicotine             nicotine
2       NaN              resin                resin
3       NaN               rosa                 rosa
4       NaN         eliglustat           eliglustat
5       NaN         valpromide           valpromide
6       NaN        clostridium          clostridium
7       NaN         ambenonium           ambenonium
8  solution         valpromide  solution+valpromide
9  solution         valpromide  solution+valpromide

Если хотите, удалите строки с NaN s в столбце drug:

df1 = df.dropna(subset=['Drug'])
df1['new'] = df1['Drug'] + '+' + df1['Product(Predicted)']
print (df)
       Drug Product(Predicted)                  new
8  solution         valpromide  solution+valpromide
9  solution         valpromide  solution+valpromide
0 голосов
/ 09 апреля 2019

Если у вас нет нулевых значений в вашем фрейме данных, упомянутых как нулевые, то я предлагаю вам сделать следующее:

df["drug"].replace("#N/A", np.nan, inplace = True)

Как только вы заменили пропущенные значения на ноль, ответом будет всего одна строка кода

df["new_col"] = df["drug"] + " + " + df["Product"]

Приведенный выше код вернет нулевое значение, если столбец, продукт или лекарство имеют нулевое значение.

Надеюсь, это поможет.

...