python - 连接两列

标签 python pandas dataframe

我有两个文本列 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

我想我想要 SQL 合并的 pandas 等价物。

最佳答案

您还可以使用 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

关于python - 连接两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64099848/

相关文章:

python - Django:模板中的自定义标签和标签评估

python - 在多索引 Python Panda 数据框中过滤多个项目

python - 将列 append 到新数据框

python - 如何一次修改多列?

python - 不太确定在 python 中使用 "or"时发生了什么

python - 如何在 Windows 上的 python 中创建区分大小写的文件?

python - Django 计算字段不会出现在迁移中

python - 如何计算在 Pandas 的另一列上分组的平均值

python - Pandas 滴答数据按小时平均并绘制历史的每一周

r - 完全删除 R 中的数据帧行。停止 table() 为删除的数据返回 0