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