如何在 pandas 数据帧行中检测到第一个非 nan 值后找到前 5 个值(包括 nan)?

问题描述 投票:0回答:2

如果我有一个像这样的 Pandas DataFrame:

     0   1   2    3    4    5    6    7
 A  NaN NaN NaN   1    2    5    6    2
 B  NaN NaN NaN   2   NaN   1   NaN   3
 C   5   4   3    2    1    5    9    1
 D   6   2  NaN   5    1    3    5   NaN
 E  NaN NaN  6    2    1    3    5    1

如何找到非 NaN 值之后的前五个值,以便获得如下所示的 Pandas 数据框:

     0    1    2    3    4    
 A   1    2    5    6    2
 B   2   NaN   1   NaN   3
 C   5    4    3    2    1    
 D   6    2   NaN   5    1
 E   6    2    1    3    5
python python-3.x pandas
2个回答
2
投票

这是使用

idxmax
all

的一种方法
df.loc[:,df.notnull().all().idxmax():]
   3    4  5    6    7
A  1  2.0  5  6.0  2.0
B  2  NaN  1  NaN  3.0
C  2  1.0  5  9.0  1.0
D  5  1.0  3  5.0  NaN
E  2  1.0  3  5.0  1.0

更新

pd.DataFrame([df.iloc[i,x:].tolist() for i,x in enumerate(df.notnull().idxmax(1))]).iloc[:,:5]
     0    1    2    3    4
0  1.0  2.0  5.0  6.0  2.0
1  2.0  NaN  1.0  NaN  3.0
2  5.0  4.0  3.0  2.0  1.0
3  6.0  2.0  NaN  5.0  1.0
4  6.0  2.0  1.0  3.0  5.0

0
投票
df1.apply(lambda ss:ss.loc[ss.loc[pd.notna(ss)].index[0]:].head(5).reset_index(drop=True),1)

     0    1    2    3    4
0  1.0  2.0  5.0  6.0  2.0
1  2.0  NaN  1.0  NaN  3.0
2  5.0  4.0  3.0  2.0  1.0
3  6.0  2.0  NaN  5.0  1.0
4  6.0  2.0  1.0  3.0  5.0
© www.soinside.com 2019 - 2024. All rights reserved.