Python 从数据框中选择/分组具有特定列最近值的行
我在一个数据框中有两列(您可以看到下面的示例) 通常在A列和B列中,我会得到10到12行具有类似值的数据。 例如:从指数1到10,然后从指数11到21。 我想将这些值分组,得到每组的平均值和标准偏差。 我在下面的代码行中找到了最接近值的索引。但我不知道如何重复这样做:Python 从数据框中选择/分组具有特定列最近值的行,python,pandas,Python,Pandas,我在一个数据框中有两列(您可以看到下面的示例) 通常在A列和B列中,我会得到10到12行具有类似值的数据。 例如:从指数1到10,然后从指数11到21。 我想将这些值分组,得到每组的平均值和标准偏差。 我在下面的代码行中找到了最接近值的索引。但我不知道如何重复这样做: Index = df['A'].sub(df['A'][0]).abs().idxmin() 有人对如何解决这个问题有什么想法吗 A B 1 3652.194531
Index = df['A'].sub(df['A'][0]).abs().idxmin()
有人对如何解决这个问题有什么想法吗
A B
1 3652.194531 -1859.805238
2 3739.026566 -1881.965576
3 3742.095325 -1878.707674
4 3747.016899 -1878.728626
5 3746.214554 -1881.270329
6 3750.325368 -1882.915532
7 3748.086576 -1882.406672
8 3751.786422 -1886.489485
9 3755.448968 -1885.695822
10 3753.714126 -1883.504098
11 -337.969554 24.070990
12 -343.019575 23.438956
13 -344.788697 22.250254
14 -346.433460 21.912217
15 -343.228579 22.178519
16 -345.722368 23.037441
17 -345.923108 23.317620
18 -345.526633 21.416528
19 -347.555162 21.315934
20 -347.229210 21.565183
21 -344.575181 22.963298
22 23.611677 -8.499528
23 26.320500 -8.744512
24 24.374874 -10.717384
25 25.885272 -8.982414
26 24.448127 -9.002646
27 23.808744 -9.568390
28 24.717935 -8.491659
29 25.811393 -8.773649
30 25.084683 -8.245354
31 25.345618 -7.508419
32 23.286342 -10.695104
33 -3184.426285 -2533.374402
34 -3209.584366 -2553.310934
35 -3210.898611 -2555.938332
36 -3214.234899 -2558.244347
37 -3216.453616 -2561.863807
38 -3219.326197 -2558.739058
39 -3214.893325 -2560.505207
40 -3194.421934 -2550.186647
41 -3219.728445 -2562.472566
42 -3217.630380 -2562.132186
43 234.800448 -75.157523
44 236.661235 -72.617806
45 238.300501 -71.963103
46 239.127539 -72.797922
47 232.305335 -70.634125
48 238.452197 -73.914015
49 239.091210 -71.035163
50 239.855953 -73.961841
51 238.936811 -73.887023
52 238.621490 -73.171441
53 240.771812 -73.847028
54 -16.798565 4.421919
55 -15.952454 3.911043
56 -14.337879 4.236691
57 -17.465204 3.610884
58 -17.270147 4.407737
59 -15.347879 3.256489
60 -18.197750 3.906086
我想说的是,如果您知道您想要的每个组/索引集的长度,那么您可以首先使用以下内容对列和行进行子集:
df['A'].iloc[0:11].mean()
然后找出一种找到标准偏差的方法。更简单的方法是将百分比变化不大于给定阈值(比如0.5)的值分组: 输出:
A B
mean std mean std
Group
0 3738.590934 30.769420 -1880.148905 7.582856
1 -344.724684 2.666137 22.496995 0.921008
2 24.790470 0.994361 -9.020824 0.977809
3 -3210.159806 11.646589 -2555.676749 8.810481
4 237.902230 2.439297 -72.998817 1.366350
5 -16.481411 1.341379 3.964407 0.430576
注意:我只使用了“A”列,因为“B”列似乎遵循相同的连续最近值模式。您可以检查以下列之间标识的组是否相同:
grps = (df[['A','B']].pct_change().abs()>1).cumsum()
grps.A.eq(grps.B).all()
预期的输出是什么?@MayankPorwal我很乐意,我的第一个选择是获得一个数据帧列表,每个具有相似行的组对应一个数据帧。第二个选择是得到两个列表,其中包含所有组的平均值和标准差。不幸的是,我不知道每个组的长度。可能在10到14之间@Kyle LYour数据集的每个组的长度都不相同,因此制作计数器要困难得多。谢谢,这非常有效
grps = (df[['A','B']].pct_change().abs()>1).cumsum()
grps.A.eq(grps.B).all()