我有很多具有以下结构的数据帧。
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