Объединить значения из одного столбца в другой с заменой второй строки в ячейке в пандах - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть два столбца, и я хочу объединить значения из одного столбца в другой.Я хочу объединить значения из столбца «A» в столбец «B», но в столбце «B» я хочу, чтобы каждая ячейка была с двумя строками, если ячейка из столбца «B» не пуста и только со значениемиз столбца "A", если ячейка в столбце "B" пуста.

Вот кадр данных

df

  A      B
  Nr.1  18b
  Nr.1  
  Nr.1  18c\nNr.2\n
  Nr.1  18d\nNr.1
  Nr.2  
  Nr.2  20a\n
  Nr.2  20a\nNr.2
  Nr.3  20b\nNr.2\n
  Nr.3  

Итак, на и я хочу:

df

  A      B
  Nr.1  18b\nNr.1
  Nr.1  Nr.1
  Nr.1  18c\nNr.1
  Nr.1  18d\nNr.1
  Nr.2  Nr.2
  Nr.2  20a\nNr.2
  Nr.2  20a\nNr.2
  Nr.3  20b\nNr.2
  Nr.3  Nr.3

Я пробовал с df ['B'] = df [["B", "A"]]. Apply (лямбда-х: '' .join (x.dropna (). astype (str)), axis = 1), когда я хочу добавить значения из столбца «A», и это работает, когда ячейка из столбца «B» заканчивается новой строкой (\ n)

Когда у меня нет новой строки в конце строки, тогда я использую df ['B'] = df [["B", "A"]]. Apply (lambda x: '\ n'.join (x.dropna)() .astype (str)), axis = 1)

Но проблема в том, что у меня уже есть две строки в ячейке.Мне нужно заменить значение во второй строке значением из столбца «A», а в конце строки не должно быть «\ n».

Это какой-то элегантный способ решить эту проблему?Я ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Используйте split с индексированием для выбора первых значений списков, добавления разделителя и столбца A и последней замены отсутствующих значений на fillna:

df['B'] = (df['B'].str.split('\\').str[0] + '\\n' + df['A']).fillna(df['A'])
print (df)
      A          B
0  Nr.1  18b\nNr.1
1  Nr.1       Nr.1
2  Nr.1  18c\nNr.1
3  Nr.1  18d\nNr.1
4  Nr.2       Nr.2
5  Nr.2  20a\nNr.2
6  Nr.2  20a\nNr.2
7  Nr.3  20b\nNr.3
8  Nr.3       Nr.3
0 голосов
/ 11 декабря 2018
# 1 - you split column B and keep only the first part    
df["B"] = df["B"].str.split(pat='\\', expand=True)[0]

# 2 - you concatenate the 2 columns separated with a \n
df["B"] = df.B + '\n' + df.A

# 3 - the second step didn't work when columns B is empty, so you use loc to replace the NaN with the value of column A
df.loc[df.B.isna(), 'B'] = df.loc[df.B.isna(), 'A']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...