python - 具有滚动平均值的熊猫 groupby 列,在日期时间之间受限,无需遍历每一行
问题描述
我在数据框中有如下数据:
ROWS = 1000
df = pandas.DataFrame()
df['DaT'] = pandas.date_range('2000-1-1', periods=ROWS, freq='H')
df['cat'] = numpy.random.choice(['a','b','c'],size=ROWS)
df['val'] = numpy.random.randint(2,size=ROWS)
df['r10'] = df.groupby(['cat'])['val'].apply(lambda x: x.rolling(10).mean() )
我需要计算一个按类别“cat”分组的列,并且是值“val”列的滚动(10 个周期)平均值,但给定行的滚动平均值不能包括它发生之日的值。
可以按如下方式生成所需的结果('wanted'):
df['wanted'] = numpy.nan
for idx, row in df.iterrows():
Rdate = row['DaT'].normalize()
Rcat = row['cat']
try: df.loc[idx,'wanted'] = df[(df['DaT'] < Rdate) & (df['cat'] == Rcat) ]['val'].rolling(10).mean().iloc[-1]
except: df.loc[idx,'wanted'] = numpy.nan
以上是一个糟糕的解决方案,但得到了结果。对于需要通过的 100000+ 行,它非常慢。有没有更优雅的解决方案?我尝试使用 shift 甚至 quantize 的组合来获得更有效的解决方案,但还没有成功
解决方案
推荐阅读
- powershell - 如何在 PowerShell 中删除输出日志中的重复信息
- assembly - 为什么这个 Risc-V 二叉树检查器不起作用?
- python - 迭代 groupby 数据帧以在每一行中操作
- javascript - 在 JSON 中引用 Javascript 变量
- database - Libreoffice Base - 如何从宏调用控制事件?
- r - 在R中按组匹配而不替换
- python - Python Pandas 和 Sqlite3 [Value] 不在索引中
- javascript - 如何伪造密钥锁调用以用于本地开发?
- swift - Firebase 在索引处加载随机查询
- javascript - 为什么点击后我的 offcanvas-wrapper 会短暂重新出现?(移动菜单)