Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 熊猫在每n个连续行中保持最高值_Python_Pandas - Fatal编程技术网

Python 熊猫在每n个连续行中保持最高值

Python 熊猫在每n个连续行中保持最高值,python,pandas,Python,Pandas,我有一个名为df_initial的pandas数据帧,有两列“a”和“b”以及N行 我想将行数减半,删除“b”值较低的行 因此,在第0行和第1行之间,我将保留第1行,在第2行和第3行之间,我将保留第3行,以此类推 这是我希望得到的结果: print(df_initial) a b 0 0.04 0.01 1 0.05 0.22 2 0.06 0.34 3 0.07 0.49 4 0.08 0.71 5 0.09

我有一个名为
df_initial
的pandas数据帧,有两列“a”和“b”以及N行

我想将行数减半,删除“b”值较低的行

因此,在第0行和第1行之间,我将保留第1行,在第2行和第3行之间,我将保留第3行,以此类推

这是我希望得到的结果:

print(df_initial)
         a     b
0     0.04  0.01
1     0.05  0.22
2     0.06  0.34
3     0.07  0.49
4     0.08  0.71
5     0.09  0.09
6     0.10  0.98
7     0.11  0.42
8     0.12  1.32
9     0.13  0.39
10    0.14  0.97
11    0.15  0.05
12    0.16  0.36
13    0.17  1.72
....

print(df_reduced)
         a     b
0     0.05  0.22
1     0.07  0.49
2     0.08  0.71
3     0.10  0.98
4     0.12  1.32
5     0.14  0.97
6     0.17  1.72
....
是否有一些功能可以执行此操作

我看到有一个重采样函数,
DataFrame.resample()
,但它对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,所以在本例中不是这样

感谢帮助我的人

您可以每两行(一种简单的方法是采用索引的形式)和采用列b对数据帧进行索引:

df.loc[df.groupby(df.index//2).b.idxmax(), :]

    a     b
0  0.05  0.22
1  0.07  0.49
2  0.09  0.71
3  0.11  0.98
4  0.13  1.32
5  0.15  0.97
6  0.17  1.72

或使用:


这是一个简单示例的应用程序,您可以在基础上应用它

import numpy as np
import pandas as pd
ar = np.array([[1.1, 1.0], [3.3, 0.2], [2.7, 10],[ 5.4, 7], [5.3, 9],[ 1.5, 15]])
df = pd.DataFrame(ar, columns = ['a', 'b'])



for i in range(len(df)):
    if df['b'][i] < df['a'][i]:
        df = df.drop(index = i)
print(df)````
将numpy导入为np
作为pd进口熊猫
ar=np.数组([[1.1,1.0],[3.3,0.2],[2.7,10],[5.4,7],[5.3,9],[1.5,15])
df=pd.DataFrame(ar,列=['a','b'])
对于范围内的i(len(df)):
如果df['b'][i]
如果您想要随机样本,可以使用
sample()
,但您所描述的内容非常特定于您的用例,因此不会内置。我建议将
b
作为一个numpy数组取出,并获取该数组上的行索引,感谢您的贡献。如果我将行按3或4分组,那么将索引除以3或4就足够了吗?是吗?是的,没错,只需将楼层划分为您想要分组的任意多行即可。不客气!谢谢,还有一个问题:如果有时我分组的两行具有相同的“b”值,会发生什么情况?他们两个都留下吗?不,只留下一个。给定两个相等的值,
idxmax
将返回第一个值的索引。@AndreaBarnabò是否清楚?否则请告诉我。别忘了你可以投票/接受答案,谢谢!
import numpy as np
import pandas as pd
ar = np.array([[1.1, 1.0], [3.3, 0.2], [2.7, 10],[ 5.4, 7], [5.3, 9],[ 1.5, 15]])
df = pd.DataFrame(ar, columns = ['a', 'b'])



for i in range(len(df)):
    if df['b'][i] < df['a'][i]:
        df = df.drop(index = i)
print(df)````