如何在熊猫中将两列合并为一列?

时间:2020-05-28 01:21:52

标签: python pandas numpy

基本上,我有两列要与某些规则合并在一起。使用以下代码,我构建了一个类似的数据框。

primaryColumn = pd.Series(["Orange", np.nan, np.nan, "Cyan"])
secondaryColumn = pd.Series(["Red", "Green", np.nan, "Blue"])

pd.concat([secondaryColumn, primaryColumn], axis=1)

enter image description here

我基本上想保留第1列中的所有内容,并替换第0列中的任何内容以替换任何nan值,然后保留两列中的所有nan值。它应导致具有以下值的列:

0橙色 1绿色 2 NaN 3青色

我已经尝试过合并和合并,但是当然大多数功能都是用于将数据帧放在一起,而不是列。

4 个答案:

答案 0 :(得分:2)

这更像fillna

s=primaryColumn.fillna(secondaryColumn)
s
0    Orange
1     Green
2       NaN
3      Cyan
dtype: object

答案 1 :(得分:1)

尝试一下...

df.loc[df['1'].isnull(),'1'] = df['0']

答案 2 :(得分:0)

fill forward在列轴上

df.ffill(axis=1)

     0        1
0   Red     Orange
1   Green   Green
2    NaN    NaN
3   Blue    Cyan

答案 3 :(得分:0)

假设您已将两个源 Series 串联在一起 一个DataFrame,您可以:

       0       1
0    Red  Orange
1  Green     NaN
2    NaN     NaN
3   Blue    Cyan

要生成第三列,请定义一个函数以获取 行或 NaN 中的最后一个有效值:

def lastValid(row):
    ind = row[::-1].first_valid_index()
    return row[ind] if pd.notnull(ind) else np.nan

然后应用此功能,将结果保存在新列中:

df[2] = df.apply(lastValid, axis=1)

结果是:

       0       1       2
0    Red  Orange  Orange
1  Green     NaN   Green
2    NaN     NaN     NaN
3   Blue    Cyan    Cyan

或者,如果您想覆盖 1 列,而不是创建新列, 将 2 更改为 1

当您有更多的源列时,它也可以工作,这是唯一的详细信息 使用输出列的正确名称。