python - Rolling.sum() 与所有以前的事件?
问题描述
我一直在查看 .rolling 文档,似乎您需要提供一个窗口,但我想做的只是将某个列的所有先前出现的事件按 .rolling 的顺序求和occurs
。
import pandas as pd
import numpy as np
df = pd.DataFrame({'person':['john','mike','john','mike','john','mike','john','mike','john','mike'],
'star':[1,1,1,1,1,1,1,1,1,1],
'occurs':[1001,1001,1002,1002,1003,1003,1004,1004,1005,1005],
})
这是我尝试过的,这不是正确的解决方案。
df['b'] = df.groupby('person')['star'].transform(lambda x: x.rolling(2).sum().shift())
期望的结果:
df_result = pd.DataFrame({'person':['john','mike','john','mike','john','mike','john','mike','john','mike'],
'star':[1,1,1,1,1,1,1,1,1,1],
'occurs':[1001,1001,1002,1002,1003,1003,1004,1004,1005,1005],
'b':[None,None,1,1,2,2,3,3,4,4],
})
解决方案
你快到了。而不是rolling
你可以使用的窗口cumsum()
import pandas as pd
import numpy as np
df = pd.DataFrame({'person':['john','mike','john','mike','john','mike','john','mike','john','mike'],
'star':[1,1,1,1,1,1,1,1,1,1],
'occurs':[1001,1001,1002,1002,1003,1003,1004,1004,1005,1005],
})
df['b'] = df.groupby('person')['star'].cumsum() - 1
df.loc[df['b'] == 0, 'b'] = np.nan
df
和只是为了获得您想要-1
的df.loc[df['b'] == 0, 'b'] = np.nan
完全相同的结果。
推荐阅读
- jms - weblogic中的publishJms nifi jms服务器
- android - WorkManager 中需要上下文
- android - 在 reycler 视图中从大数据中设置有限数据
- ruby - 在 Ruby 中从带有标题的 CSV 加载数据
- xamarin.forms - 如何将 Steam 字符串“Xamarin.Forms.StreamImageSource”转换为图像源
- powershell - 用于从另一个脚本创建新任务序列的 Powershell 脚本
- ruby-on-rails - 如何从应用程序控制器中呈现带有错误的 json?
- azure - Microsoft Azure Maps 缺少 atlas.control
- javascript - 获取上周日期范围从星期日到星期六的时刻js
- hibernate - 这些接口方法的实现在哪里?