今天我有点奇怪。我需要创建一个基于if语句序列的列表。我的数据帧如下所示:
prom_lect4b_rbd prom_lect2m_rbd prom_lect8b_rbd prom_lect6b_rbd
100 np.nan 80 200
np.nan np.nan 40 1000
np.nan np.nan np.nan 90
230 100 80 100
列是根据优先级排序的。我试图创建的列表(或列)从那些不是nan
的行中获取第一个值。所以,在这个例子中,我想要一个如下所示的列:
simce_final_lect
100
40
90
230
我尝试了以下方法:
cols=[simces.prom_lect4b_rbd, simces.prom_lect2m_rbd, simces.prom_lect8b_rbd, simces.prom_lect6b_rbd]
simce_final_lect=[j if np.isnan(j)==False else k if np.isnan(k)==False
else l if np.isnan(l)==False else m if np.isnan(m)==False
else np.nan for j,k,l,m in zip(cols[0],cols[1],cols[2],cols[3])]
它只是将两个值(8752个值中的两个)复制到列表中。但是如果我将我的zip限制为j,k,l
,它就可以完美地工作:
simce_final_lect=[j if np.isnan(j)==False else k if np.isnan(k)==False
else l if np.isnan(l)==False
else np.nan for j,k,l in zip(cols[0],cols[1],cols[2])]
你知道发生了什么事吗?否则,有没有更有效的办法来解决我的问题?你知道吗
使用
first_valid_index()
:收益率:
您可以使用
bfill(axis=1)
并选择第一列相关问题 更多 >
编程相关推荐