gpt4 book ai didi

python - 如何在pandas中选择多个具有间隔的连续行?

转载 作者:行者123 更新时间:2023-12-01 08:42:09 25 4
gpt4 key购买 nike

我想每 5 行选择 3 行。例如,前 5 行,我想保留最后 3 行。

输入:

import pandas as pd 
df = pd.DataFrame({'a': np.arange(16)})
print(df)

输出:

     a
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14

预期:

     a
2 2
3 3
4 4
7 7
8 8
9 9
12 12
13 13
14 14

希望得到帮助!

最佳答案

使用groupby带有楼层划分的索引并按 tail 获取最后 3 行:

df = df.groupby(df.index // 5).tail(3)
print(df)
a
2 2
3 3
4 4
7 7
8 8
9 9
12 12
13 13
14 14
15 15 <- last group have only one value, so tail select it

另一个想法是通过np.arange获取每行的索引值,并将其 reshape 为二维数组,选择最后一个“列”并通过ravel展平,获得与真实值的交集索引值并按 loc 选择:

N = 5
M = 3
pos = np.arange((len(df) // N + 1) * N).reshape(-1, N)[:, -M:].ravel()
idx = np.intersect1d(df.index, pos)

df = df.loc[idx]
print(df)
a
2 2
3 3
4 4
7 7
8 8
9 9
12 12
13 13
14 14

详细信息:

print(np.arange((len(df) // N + 1) * N).reshape(-1, N))
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]

print (np.arange((len(df) // N + 1) * N).reshape(-1, N)[:, -M:])
[[ 2 3 4]
[ 7 8 9]
[12 13 14]
[17 18 19]]

print (np.arange((len(df) // N + 1) * N).reshape(-1, N)[:, -M:].ravel())
[ 2 3 4 7 8 9 12 13 14 17 18 19]

print(np.intersect1d(df.index, pos))
[ 2 3 4 7 8 9 12 13 14]

关于python - 如何在pandas中选择多个具有间隔的连续行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com