python - 如何在 groupby 和 rollingsum 之后创建具有值的新列?
问题描述
我正在尝试在现有的df
. 新列的值由 groupby 和 rolling sum 的组合创建。我该怎么做呢?
我尝试了两种方法,都导致 NaN 值或“插入列的索引与帧索引不兼容”
df = 类似这样的东西:
HomeTeam FTHP
0 Bristol Rvs 0
1 Crewe 0
2 Hartlepool 3
3 Huddersfield 1
我试过了:
(1)
df['new'] = df.groupby('HomeTeam')['FTHP'].rolling(4).sum()
(2)
df['new'] = df.groupby('HomeTeam').FTHP.apply(lambda x: x.rolling(4).mean())
(1) 输出以下是我想在新列中添加的值。
HomeTeam
Brighton 12 NaN
36 NaN
49 NaN
72 2.0
99 2.0
我正在尝试将这些值添加到适当的 HomeTeam 旁边的新列中。导致前三个的 NaN(因为它正在滚动(4))并在之后拾取值,例如:
HomeTeam FTHP RollingMean
0 Bristol Rvs 0 NaN
1 Crewe 0 NaN
2 Hartlepool 3 NaN
3 Huddersfield 1 NaN
解决方案
要确保与原始(非重复)索引对齐:
df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(4).sum().reset_index(0, drop=True)
有一个df
:
HomeTeam FTHP
A a 0
B b 1
C b 2
D a 3
E b 4
分组as_index=False
添加一个ngroup
值作为第 0 级,在第 1 级保留原始索引:
df.groupby('HomeTeam', as_index=False)['FTHP'].rolling(2).sum()
#0 A NaN
# D 3.0
#1 B NaN
# C 3.0
# E 6.0
#Name: FTHP, dtype: float64
删除级别=0 以确保与原始索引对齐。您的原始索引不应重复,否则您会得到一个ValueError
.
推荐阅读
- arrays - 如何使用 Powershell 获取多个数组的对象?
- memory-leaks - 如何在 rust 中删除集合中的项目
- c++ - Arduino Leonardo,Wire.h 抛出错误,但设置为 Esp32 时没有错误
- php - 在 Wordpress gutenberg 块编辑器中编辑帖子时如何添加额外的查询 URL 变量?
- php - 将输入序列转换为列表数组的算法
- go - Golang如何使用go mod命令安装lib
- apache-spark - Hive 未分区表未加载数据
- flutter - Flutter:如何使 buttonNavigationBar 的 BottomAppBar 出现在我拥有的每个屏幕中?
- php - PHP- Laravel 如何在函数内部调用函数?
- robotframework - 如何使用 Robot Framework 捕获警报框