我希望通过将当前行中的值与前两行中的值进行比较来获取列的最小值,我知道这可以通过创建带有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
无论如何要做得更好?
答案 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
以获得更一般的案例。