为 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())
假设我有一列 (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())