如何在Pandas中选择行范围直到特定行

jjhzyzn0  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(187)

我有一个Pandas数据框。我已经从该数据框中选择了一行。
我现在需要从 Dataframe 中选择一个行所在的范围,并返回55行,如果有这么多的话。
下面是一些伪代码,希望有帮助:

df = pd.DataFrame(...)
row = df[3454]

index = row.index
start = max(0, index - 55)
end = max(1, index)
dfRange = df[start:end]
mv1qrgav

mv1qrgav1#

这个应该可以了

integer_location = np.where(df.index == 3454)[0][0]
start = max(0, integer_location - 55)
end = max(1, integer_location)
dfRange = df.iloc[start:end]

此链接有更多信息Getting the integer index of a Pandas DataFrame row fulfilling a condition?

cwxwcias

cwxwcias2#

你可以对一个 Dataframe 进行切片,所以要选择一个范围,直到某个点,你可以切片。最简单的情况是将df切片到特定的索引,然后调用tail()来获取特定的行范围。例如,要获取55个连续的行,直到特定的索引,你可以使用以下命令:

slice_length = 55
particular_index = 3454
df.loc[:particular_index].tail(slice_length)

对于使用单个布尔索引的更复杂的方法,可以使用cummax()cumsum()的组合,并使用between()进行切片。

df.loc[df.index.to_series().eq(particular_index)[::-1].cummax().cumsum().between(1, slice_length)]

# if `df` is MultiIndex
df.loc[df.index.to_frame().eq(particular_index).all(axis=1)[::-1].cummax().cumsum().between(1, slice_length)]

一个工作示例:

df = pd.DataFrame({'A': range(6), 'B': range(6,0,-1)}, index=[f'a{i}' for i in range(6)])

slice_length = 3
particular_index = df.iloc[4].name
df1 = df.loc[:particular_index].tail(slice_length)

相关问题