我有一个数据框,其中有一列“date”类型为dtype m8[ns]和另一个“expected_response”。然后,有一个列“cumulative_expected”,它对具有相同日期的行中的预期_响应进行累积和。数据帧在每月的每一秒都有一行。如下所示:

               date Expected_response cumulative_expected
       0    2018-03-01  0.270   0.270
       1    2018-03-01  0.260   0.530
       2    2018-03-01  0.240   0.770
       3    2018-03-01  0.224   0.994
       4    2018-03-01  0.204   1.198
       5    2018-03-01  0.194   1.392
       6    2018-03-01  0.190   1.582
       ...  ...     ...     ...
2678395     2018-03-31  0.164   -7533.464
2678396     2018-03-31  0.164   -7533.300
2678397     2018-03-31  0.160   -7533.140
2678398     2018-03-31  0.154   -7532.986
2678399     2018-03-31  0.150   -7532.836

如您所见,存在一个错误:累积和不识别日期的更改,并且累积和不会在每次日期更改时重新启动。
代码是:
df['cumulative_expected']=df.groupby(df['date']!=df['date'])['Expected_response'].cumsum()
也许可以选择创建一个计数器,每86400行(一天中的秒数)增加1,然后按计数器分组但我不知道怎么做。
还有别的办法吗?
提前谢谢你

最佳答案

有默认索引,因此可以使用楼层划分:

df['cumulative_expected'] = df['Expected_response'].groupby(df.index // 86400).cumsum()

一般来说,解决方案是使用楼层划分创建np.arange
arr = np.arange(len(df)) // 86400
df['cumulative_expected'] = df['Expected_response'].groupby(arr).cumsum()

您的解决方案应更改为将shifted值与cumsum进行比较:
s = (df['date']!=df['date'].shift()).cumsum()
df['cumulative_expected'] = df['Expected_response'].groupby(s).cumsum()

使用更改的样本数据进行测试:
print (df)

         date  Expected_response
0  2018-03-01              0.270
1  2018-03-01              0.260
2  2018-03-02              0.240
3  2018-03-02              0.224
4  2018-03-02              0.204
5  2018-03-01              0.194
6  2018-03-01              0.190

s = (df['date']!=df['date'].shift()).cumsum()
print (s)
0    1
1    1
2    2
3    2
4    2
5    3
6    3
Name: date, dtype: int32

df['cumulative_expected'] = df['Expected_response'].groupby(s).cumsum()
print (df)
        date  Expected_response  cumulative_expected
0 2018-03-01              0.270                0.270
1 2018-03-01              0.260                0.530
2 2018-03-02              0.240                0.240
3 2018-03-02              0.224                0.464
4 2018-03-02              0.204                0.668
5 2018-03-01              0.194                0.194
6 2018-03-01              0.190                0.384

关于python - Pandas :每n行累积和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53516252/

10-10 04:22