我有一个名为“main_df”的数据帧,它包含3列X、Y、Z
X Y Z
NaN NaN ZVal1
NaN NaN ZVal2
XVal1 NaN NaN
NaN YVal1 NaN
每一列都包含特定类型(X、Y、Z)的数据,因此,如果某一行的X列中有数据,则Y/Z列中不会有数据,因为它不是X类型
如果您将所有3列组合在一起,它们会整齐地“相互滑动”,您将得到所有向下的值
如何将这3列合并到第4列中,以便忽略NaN值,而只获取该行3列中存在的任何单个值
预期产出:
X Y Z XYZ
NaN NaN ZVal1 ZVal1
NaN NaN ZVal2 ZVal2
XVal1 NaN NaN XVal1
NaN YVal1 NaN YVal1
数据帧代码:
import pandas as pd
import numpy as np
df = pd.DataFrame(columns=['X', 'Y', 'Z'], data=[[np.NaN, np.NaN, 'ZVal1'], [np.NaN, np.NaN, 'ZVal2'], ['XVal1', np.NaN, np.NaN], [np.NaN,'YVal1' ,np.NaN]])
现在,我正试图按照以下思路做一些事情:
df['XYZ'] = df['X'].astype(str) + df['Y'].astype(str) + df['Z'].astype(str) but that combines the NaN values into one long string
与
stack
一起:得到
因为您保证每行只有1个非NaN,并且默认情况下
stack
会删除NaN使用花式索引的另一种方法:
对于每一行,它查看非NaN值的索引并选择它
尝试:
印刷品:
或:
相关问题 更多 >
编程相关推荐