Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从数据框中选择/分组具有特定列最近值的行_Python_Pandas - Fatal编程技术网

Python 从数据框中选择/分组具有特定列最近值的行

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

我在一个数据框中有两列(您可以看到下面的示例) 通常在A列和B列中,我会得到10到12行具有类似值的数据。 例如:从指数1到10,然后从指数11到21。 我想将这些值分组,得到每组的平均值和标准偏差。 我在下面的代码行中找到了最接近值的索引。但我不知道如何重复这样做:

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()