基本上,我有两列要与某些规则合并在一起。使用以下代码,我构建了一个类似的数据框。
primaryColumn = pd.Series(["Orange", np.nan, np.nan, "Cyan"])
secondaryColumn = pd.Series(["Red", "Green", np.nan, "Blue"])
pd.concat([secondaryColumn, primaryColumn], axis=1)
我基本上想保留第1列中的所有内容,并替换第0列中的任何内容以替换任何nan值,然后保留两列中的所有nan值。它应导致具有以下值的列:
0橙色 1绿色 2 NaN 3青色
我已经尝试过合并和合并,但是当然大多数功能都是用于将数据帧放在一起,而不是列。
答案 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 。
当您有更多的源列时,它也可以工作,这是唯一的详细信息 使用输出列的正确名称。