我有一个名为df_initial
的熊猫数据框,其中有两列“ 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有效,所以在这种情况下无效。
感谢谁能帮助我
答案 0 :(得分:4)
您可以每两行groupby
(这样做的一种简单方法是获取索引的floor division)并获取b
列的idxmax
来索引数据框:
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
df.loc[df.b.rolling(2).max()[1::2].index, :]
答案 1 :(得分:2)
这是一个简单示例的应用程序,您可以在自己的基础上应用它。
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)````