我有一个数据框:
year month day highest_temp
0 1961 1 1 7.9
1 1961 1 2 9.2
2 1961 1 3 7.3
3 1961 1 4 11.5
4 1961 1 5 7.7
5 1961 1 6 8.6
6 1961 1 7 9.1
7 1961 1 8 11.8
8 1961 1 9 6.9
我想从2月1日开始对这个数据帧的所有年份的highest_temp列求和,直到该总和> = 600。我尝试了iterrows(),sum(),但没有得到想要的结果。感谢您的帮助
编辑: 基于@bubble答案,我得到以下结果:
57 1961 2 27 11.6 273.2
58 1961 2 28 11.7 284.9
59 1961 3 1 15.3 300.2
60 1961 3 2 18.9 319.1
.. ... ... ... ... ...
81 1961 3 23 15.5 584.3
82 1961 3 24 13.0 597.3
但是,我仍然希望该值超过600的阈值。例如:在上述结果中,我希望最终值加上一行。 这是我基于@bubble的代码:
value = 600
df2=df2.drop(df2[df2.month<2].index)
cumsums = df2.groupby(['year']).transform('cumsum')['highest_temp']
df2.loc[cumsums < value, 'cumsum_t'] = cumsums[cumsums < value]
result = df2.loc[cumsums < value, :]
答案 0 :(得分:2)
df.loc[df.highest_temp.cumsum()<600,:]
这通过条件“ hightest_temp的总和减去600”来选择子数据帧。您可以再次申请cumsum,例如
data = df.loc[df.highest_temp.cumsum()<600, :]
data.loc[:, 'cumsum_t'] = data.highest_temp.cumsum()
此外,您可以使用groupby
方法重置每个月的累积金额:
value = 600
cumsums = df.groupby(['month']).transform('cumsum')['highest_temp']
df.loc[cumsums < value, 'cumsum_t'] = cumsums[cumsums < value]
result = df.loc[cumsums < value, :]