【问题标题】:Start function from a specific row从特定行开始函数
【发布时间】:2021-09-07 13:11:33
【问题描述】:

我想知道,我怎样才能只为not-NaN 行运行方法、函数或循环。我不想删除数据框并重置索引。目前,我正在使用 AvgHigh 函数,但它也在考虑 NaN 行。此外,如果建议的方法可以同时用于系列和数组。如果没有,请建议两者。提前致谢。

编辑

def AvgHigh(src, val) :
    dat_list = []
    last_src = np.nan              # init variable that keeps the prev iteration value
    for a in range(len(src)) :
        if src[a] > val :
            dat_list.append(src[a])    # yield src[a]
            last_src = src[a]          # update prev iteration value (for next iteration)
        elif (src[a] <= val) and (a == 0) :
            dat_list.append(np.nan)    # yield np.nan
        elif (src[a] <= val) and (a != 0) :
            dat_list.append(last_src)  # yield src[a-1]
    return dat_list

df1['high_r'] = AvgHigh(df1['Values'], 14020)

【问题讨论】:

  • 请显示您想要的示例结果
  • 对不起@nay,实际上我意识到滚动方法不是这里的问题,AvgHigh 函数是我想从非 NaN 行开始的。感谢您的更新,我也更新了问题和代码。

标签: python pandas dataframe numpy nan


【解决方案1】:

这应该得到你正在寻找的 high_r 列。添加在对 pd.nan 值的检查中。

df1 = pd.DataFrame({'values': [np.nan, np.nan,np.nan, np.nan,np.nan, 14018,14022,14023,14021,14020,14014]})

def AvgHigh(src, val) :
    dat_list = []
    last_src = np.nan              # init variable that keeps the prev iteration value
    for a in range(len(src)):
        if not np.isnan(src[a]): ##<<<<<<New if statement
            if src[a] > val :
                dat_list.append(src[a])    # yield src[a]
                last_src = src[a]          # update prev iteration value (for next iteration)
            elif (src[a] <= val) and (a == 0) :
                dat_list.append(np.nan)    # yield np.nan
            elif (src[a] <= val) and (a != 0) :
                dat_list.append(last_src)  # yield src[a-1]
        else: ##<<<<<<New else statement
            dat_list.append(np.nan)
    return dat_list

df1['high_r'] = AvgHigh(df1['values'], 14020)
df1

     values   high_r
0       NaN      NaN
1       NaN      NaN
2       NaN      NaN
3       NaN      NaN
4       NaN      NaN
5   14018.0      NaN
6   14022.0  14022.0
7   14023.0  14023.0
8   14021.0  14021.0
9   14020.0  14021.0
10  14014.0  14021.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 2023-03-19
    • 1970-01-01
    • 2017-04-11
    • 2020-11-05
    • 2019-03-07
    • 2015-08-27
    相关资源
    最近更新 更多