通过替换熊猫单元格中的第二行,将一列中的值连接到另一列

我有两列,想将一列的值连接到另一列。我想将“A”列中的值连接到“B”列,但是在“B”列中,如果“B”列中的单元格不为空并且只有值,我希望每个单元格在“B”列中具有两行如果“B”列中的单元格为空,则来自“A”列。


这是数据框


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(lambda x: ''.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”。


这是解决这个问题的优雅方法吗?我很感激任何帮助。


犯罪嫌疑人X
浏览 189回答 2
2回答

catspeake

# 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 \ndf["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 Adf.loc[df.B.isna(), 'B'] = df.loc[df.B.isna(), 'A']

一只萌萌小番薯

split与索引一起使用以选择列表的第一个值,添加分隔符和列A,最后通过fillna以下方式替换缺失值:df['B'] = (df['B'].str.split('\\').str[0] + '\\n' + df['A']).fillna(df['A'])print (df)      A          B0  Nr.1  18b\nNr.11  Nr.1       Nr.12  Nr.1  18c\nNr.13  Nr.1  18d\nNr.14  Nr.2       Nr.25  Nr.2  20a\nNr.26  Nr.2  20a\nNr.27  Nr.3  20b\nNr.38  Nr.3       Nr.3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python