通过比较Pandas中的前n行来获取列的最小值

时间:2018-01-18 12:30:45

标签: python pandas

我希望通过将当前行中的值与前两行中的值进行比较来获取列的最小值,我知道这可以通过创建带有shift(-1)和shift(-2)的2列来完成。 )并返回行的最小值,但我想知道如果我将范围从前2行扩展到n行,是否有任何方法可以做得更好。

例如在下面的数据集

 df= pd.DataFrame([12,11,4,15,6,],columns=['score'])
>>> df
   score
0     12
1     11
2      4
3     15
4      6

为先前值

创建新列prv_score_1,prv_score_2
>>> df['prv_score_1'] = df['score'].shift(-1)
>>> df['prv_score_2'] = df['score'].shift(-2)
>>> df
   score  prv_score_1  prv_score_2
0     12         11.0          4.0
1     11          4.0         15.0
2      4         15.0          6.0
3     15          6.0          NaN
4      6          NaN          NaN

创建最小列并获取行的最小值

>>> df['Minimum'] = df.min(1)
>>> df
   score  prv_score_1  prv_score_2  Minimum
0     12         11.0          4.0      4.0
1     11          4.0         15.0      4.0
2      4         15.0          6.0      4.0
3     15          6.0          NaN      6.0
4      6          NaN          NaN      6.0

无论如何要做得更好?

3 个答案:

答案 0 :(得分:3)

你需要使用窗口3滚动分钟,即

df['new'] = df['score'][::-1].rolling(3,min_periods=1).min()[::-1]

  score  new
0   12.0  4.0
1   11.0  4.0
2    4.0  4.0
3   15.0  6.0
4    6.0  6.0

答案 1 :(得分:0)

您可以查看滚动功能:

  

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rolling.html

在你的情况下,这将解决问题:

df[::-1].rolling(3, min_periods=1).min()[::-1]

答案 2 :(得分:-1)

您可以使用rolling.min()实现此目的。例如,窗口大小为2,请使用:

df.rolling(2).min()

然后将2更改为n以获得更一般的案例。