为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2021-09-14 13:41:03
我有两列,想将一列的值连接到另一列。我想将“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”。这是解决这个问题的优雅方法吗?我很感激任何帮助。
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

# 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']


查看完整回答
反对 回复 2021-09-14
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信