下采样熊猫数据框行

时间:2019-05-03 14:06:50

标签: python pandas

我有一个名为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有效,所以在这种情况下无效。

感谢谁能帮助我

2 个答案:

答案 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

或使用DataFrame.rolling

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