我有一个类似于下图的数据框。
In[2]: df = pd.DataFrame({'P1': [1, 2, None, None, None, None],'P2': [None, None, 3, 4, None, None],'P3': [None, None, None, None, 5, 6]})
Out[2]:
P1 P2 P3
0 1.0 NaN NaN
1 2.0 NaN NaN
2 NaN 3.0 NaN
3 NaN 4.0 NaN
4 NaN NaN 5.0
5 NaN NaN 6.0
我正在尝试将所有列合并到新数据框中的单个 P 列中(见下文)。
P
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
在我的实际代码中,我有一个应该合并的任意列列表,不一定是 P1、P2 和 P3( 1 到 5 列之间)。我尝试了以下几行:
new_series = pd.Series()
desired_columns = ['P1', 'P2', 'P3']
for col in desired_columns:
other_series=df[col]
new_series = new_series.align(other_series)
然而,这会产生一个 Series 对象的元组,而且它们似乎都不包含我需要的数据。我可以遍历每一行,然后检查每一列,但我觉得我可能缺少一个简单的 pandas 解决方案。
请您参考如下方法:
如果每行只有一个非 None 值向前填充 None 并按位置选择最后一列:
df['P'] = df[['P1', 'P2', 'P3']].ffill(axis=1).iloc[:, -1]
print (df)
P1 P2 P3 P
0 1.0 NaN NaN 1.0
1 2.0 NaN NaN 2.0
2 NaN 3.0 NaN 3.0
3 NaN 4.0 NaN 4.0
4 NaN NaN 5.0 5.0
5 NaN NaN 6.0 6.0
