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

连接两列.

连接两列.

慕妹3146593 2023-09-12 16:50:41
我有两个文本列 A 和 B。我想采用第一个非空字符串,或者如果 A 和 B 都有值,则采用 A 中的值。C 是我试图创建的列:import pandas as pdcols = ['A','B']data = [['data','data'],        ['','data'],        ['',''],        ['data1','data2']]df = pd.DataFrame.from_records(data=data, columns=cols)      A      B0  data   data1         data2             3  data1  data2我的尝试:df['C'] = df[cols].apply(lambda row: sorted([val if val else '' for val in row], reverse=True)[0], axis=1) #Reverse sort to avoid picking an empty string      A      B      C0  data   data      data1         data      data2             3  data1  data2     data2 #I want data1 here预期输出:      A      B      C0  data   data      data1         data      data2             3  data1  data2     data1我想我想要 pandas 相当于 SQL 合并。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

您还可以使用numpy.where

In [1022]: import numpy as np

In [1023]: df['C'] = np.where(df['A'].eq(''), df['B'], df['A'])


In [1024]: df

Out[1024]: 

       A      B      C

0   data   data   data

1          data   data

2                     

3  data1  data2  data1


查看完整回答
反对 回复 2023-09-12
?
跃然一笑

TA贡献1826条经验 获得超6个赞

让我们尝试一下idxmax+ lookup:


df['C'] = df.lookup(df.index, df.ne('').idxmax(1))

或者您可以使用Series.where:


df['C'] = df['A'].where(lambda x: x.ne(''), df['B'])

       A      B      C

0   data   data   data

1          data   data

2                     

3  data1  data2  data1


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

添加回答

举报

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