首页 > 解决方案 > Pandas - 根据列中的先前值设置值

问题描述

我有一个包含降雨数据的数据集。我想使用 Pandas 设置一个运行雨水蓄能器。

这就是我所拥有的:

def determinePrev(df):
    #NEED TO CHANGE VALUE TO RUNNING     VVVVVV#    
    df.loc[df['Rain'] > 0, 'Running']=df['Rain'].shift(1)+df['Rain']

    return df

像这样运行它是可行的,但只有在连续两天下雨的情况下才合适。当用 'Running' 替换后一个 'Rain' 时,我得到 KeyError: 'Running'。

我一直在努力寻找解决方案,但感觉就像我无处可去。我对 Python 比较陌生,所以如果你有解决方案,你能提供尽可能多的细节吗?

谢谢!

编辑:我应该补充一点,我不想计算连续的天数,而是测量连续下雨天的降雨量。

编辑#2:

电流输出与所需输出的图片

标签: python-3.xpandasshift

解决方案


使用Series.eqSeries.cumsum计算c用于对连续雨天进行分组的累积级数,然后使用对这个级数上Series.groupby的列进行分组Rain并使用变换函数cumsum

c = df['Rain'].eq(0).cumsum()
df['Running'] = df['Rain'].groupby(c).cumsum()

结果:

# print(df)
   Rain  Running
0   0.0      0.0
1   0.8      0.8
2   2.4      3.2
3  19.4     22.6
4   6.2     28.8
5   1.0     29.8
6   0.0      0.0

推荐阅读