我有这样的Dataframe
:
Index A
0 3
1 2
2 5
3 4
4 1
5 2
6 7
7 3
8 1
我需要进行轮类,拿 5 block ,这样最大值就在它们的中心。
结果:
Index A Res
0 3 0
1 2 0
2 5 5
3 4 0
4 1 0
5 2 0
6 7 7
7 3 0
8 1 0
我如何使用 pandas 方法来实现这个?
最佳答案
您可以使用rolling
使用 center=True
和 step=5
参数:
N = 5
df.loc[N//2::N, 'Res'] = (df['A'].rolling(N, center=True, min_periods=1, step=N)
.max().values
)
输出:
Index A Res
0 0 3 NaN
1 1 2 NaN
2 2 5 5.0
3 3 4 NaN
4 4 1 NaN
5 5 2 NaN
6 6 7 NaN
7 7 3 7.0
8 8 1 NaN
如果您想要 0
,请使用它们预先填充列 (df['Res'] = 0
) 或使用 @Corralien 的注释方法掩码:
df['Res'] = (df.rolling(5, center=True, min_periods=1)['A'].max()
.where(lambda x: x == df['A'], 0).convert_dtypes()
)
输出:
Index A Res
0 0 3 0
1 1 2 0
2 2 5 5
3 3 4 0
4 4 1 0
5 5 2 0
6 6 7 7
7 7 3 0
8 8 1 0
关于python - 如何通过移位和条件找到最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77397723/