根据 pandas 数据帧中的值获取该行以及前面的几行



我有很多具有以下结构的数据帧。

TRCODEP     10101     10201     20101     20201 20203
43826     4:00:00       NaN       NaN       NaN   NaN
43827         NaN       NaN       NaN       NaN   NaN
43828         NaN  20:00:00       NaN       NaN   NaN
43829         NaN       NaN       NaN  20:35:00   NaN
43830    20:45:00       NaN       NaN       NaN   NaN
43829         NaN       NaN  02:00:00       NaN   NaN

对于每个数据帧,我想创建一个新的数据帧,该数据帧选择10101列中具有非 NaN 条目的行和前三行。我遇到了麻烦,因为我可能有多个非 NaN 条目10101如您在上面看到的。而且,即使假设这个问题不存在,我似乎也无法使用df['10101'].notna().index[0]df['10101'].notna().index[0]-3对数据帧进行切片。

我有哪些选择?

这并不难。您可以使用Series.last_valid_index和一些切片来执行此操作:

# get index of last valid non-null value in 10101
idx = df.index.get_loc(df['10101'].last_valid_index())
# slice rows (with some minor bounds checking)
df.iloc[max(0, idx - 3):idx + 1]
TRCODEP     10101     10201 20101     20201  20203
1    43827       NaN       NaN   NaN       NaN    NaN
2    43828       NaN  20:00:00   NaN       NaN    NaN
3    43829       NaN       NaN   NaN  20:35:00    NaN
4    43830  20:45:00       NaN   NaN       NaN    NaN

最新更新