为 python 中的数据帧的滚动数据查找不小于 x 的最小数字

Finding the smallest number not smaller than x for a rolling data of a dataframe in python

假设我有一列 (O) 的行数据:1,2,3,4,5,6,7,8,9,10。 它的平均值是5.5。 我需要找到大于平均值 5.5 的最小数字:- 即 '6'

这是我到目前为止所尝试过的方法。

方法一:

df["test1"] = df["O"].shift().rolling(min_periods=1, window=10).apply(lambda x: pd.Series(x).nlargest(5).iloc[-1])

被丢弃,因为该数字可能并不总是第 6 个数字。

方法二:

great = []
df['test1'] = ''
df["avg"] = df["O"].shift().rolling(min_periods=1, window=10).mean()
for i in range(1, len(df)):
    for j in range(0, 10):
        if(df.loc[i-j, 'O'] > df.loc[i, 'avg']):
            great.append(df.loc[i-j, 'O'])
    df.loc[i, 'test1'] = min(great)

这会引发错误:

KeyError: -1

请大家尽快帮忙找出代码中的小错误

谢谢, D.

当 Series 大于均值时屏蔽 Series,然后排序,然后取第一行。

import pandas as pd
df = pd.DataFrame([1,2,3,4,5,6,7,8,9,10], columns=("vals",))
df[df.vals > df.vals.mean()].sort_values("vals").head(1)
# >     vals
#    5  6

试试

n = 10
output = df.vals.rolling(10).apply(lambda x : x[x>x.mean()].min())