连接两列.

我有两个文本列 A 和 B。我想采用第一个非空字符串,或者如果 A 和 B 都有值,则采用 A 中的值。C 是我试图创建的列:


import pandas as pd


cols = ['A','B']

data = [['data','data'],

        ['','data'],

        ['',''],

        ['data1','data2']]


df = pd.DataFrame.from_records(data=data, columns=cols)


      A      B

0  data   data

1         data

2             

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      C

0  data   data      data

1         data      data

2             

3  data1  data2     data2 #I want data1 here

预期输出:


      A      B      C

0  data   data      data

1         data      data

2             

3  data1  data2     data1

我想我想要 pandas 相当于 SQL 合并。


慕妹3146593
浏览 103回答 2
2回答

饮歌长啸

您还可以使用numpy.where:In [1022]: import numpy as npIn [1023]: df['C'] = np.where(df['A'].eq(''), df['B'], df['A'])In [1024]: dfOut[1024]:        A      B      C0   data   data   data1          data   data2                     3  data1  data2  data1

跃然一笑

让我们尝试一下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      C0   data   data   data1          data   data2                     3  data1  data2  data1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python