我有一个grouped类型的时间序列对象<pandas.core.groupby.SeriesGroupBy object at 0x03F1A9F0>.grouped.sum()给出了期望的结果,但我无法使用rolling_sum来处理groupby对象.有没有办法将滚动功能应用于groupby对象?例如:
x = range(0, 6)
id = ['a', 'a', 'a', 'b', 'b', 'b']
df = DataFrame(zip(id, x), columns = ['id', 'x'])
df.groupby('id').sum()
id x
a 3
b 12
Run Code Online (Sandbox Code Playgroud)
但是,我希望有类似的东西:
id x
0 a 0
1 a 1
2 a 3
3 b 3
4 b 7
5 b 12
Run Code Online (Sandbox Code Playgroud) python pandas rolling-computation rolling-sum pandas-groupby
我想在pandas滚动功能中设置center = True,对于时间序列:
import pandas as pd
series = pd.Series(1, index = pd.date_range('2014-01-01', '2014-04-01', freq = 'D'))
series.rolling('7D', min_periods=1, center=True, closed='left')
Run Code Online (Sandbox Code Playgroud)
但输出是:
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-6-6b30c16a2d12> in <module>()
1 import pandas as pd
2 series = pd.Series(1, index = pd.date_range('2014-01-01', '2014-04-01', freq = 'D'))
----> 3 series.rolling('7D', min_periods=1, center=True, closed='left')
~\Anaconda3\lib\site-packages\pandas\core\generic.py in rolling(self, window, min_periods, freq, center, win_type, on, axis, closed)
6193 min_periods=min_periods, freq=freq,
6194 center=center, win_type=win_type,
-> 6195 on=on, axis=axis, closed=closed)
6196
6197 cls.rolling = …Run Code Online (Sandbox Code Playgroud) 令人担忧的是这个示例性的熊猫数据框:
Measurement Trigger Valid
0 2.0 False True
1 4.0 False True
2 3.0 False True
3 0.0 True False
4 100.0 False True
5 3.0 False True
6 2.0 False True
7 1.0 True True
Run Code Online (Sandbox Code Playgroud)
只要Trigger是True的,我希望计算金额和最后3(从当前开始)有效测量的意思。如果列Valid是,则测量被认为是有效的True。因此,让我们使用上述数据框中的两个示例进行澄清:
Index 3:2,1,0应该使用指数。预期的Sum = 9.0, Mean = 3.0Index 7:7,6,5应该使用指数。预期的Sum = 6.0, Mean = 2.0我曾尝试pandas.rolling创建新的、移动的列,但没有成功。请参阅我的测试中的以下摘录(应直接运行):
import unittest
import pandas as pd
import numpy as np …Run Code Online (Sandbox Code Playgroud) 我有这个数据帧:
dates = pd.date_range(start='2016-01-01', periods=20, freq='d')
df = pd.DataFrame({'A': [1] * 20 + [2] * 12 + [3] * 8,
'B': np.concatenate((dates, dates)),
'C': np.arange(40)})
Run Code Online (Sandbox Code Playgroud)
我按日期对数据框进行了排序:
df.sort_values('B',inplace=True)
Run Code Online (Sandbox Code Playgroud)
我期待在日期做一个前滚.但是,我只能使用以下方式进行后滚:
df.groupby('A').rolling(7, on='B',min_periods=0).C.sum()
A B
1 2016-01-01 0.0
2016-01-02 1.0
2016-01-03 3.0
2016-01-04 6.0
2016-01-05 10.0
2016-01-06 15.0
Run Code Online (Sandbox Code Playgroud)
我想做前滚.
我是 Scala 的新手,我想用列表的固定窗口计算移动总和。
例如:给定列表值 (1.0, 2.0, 3.0, 6.0, 7.0, 8.0, 12.0, 9.0, 4.0, 1.0) 和句点 4,函数应该返回: (1.0, 3.0, 6.0, 12.0, 18.0, 24.0, 33.0, 36.0, 33.0, 26.0)
如果 list.size < period 则只返回累积总和。
我做了一些尝试
def mavg(values: List[Double], period: Int): List[Double] = {
if (values.size <= period) (values.sum ) :: List.fill(period -1)(values.sum ) else {
val rest: List[Double] = mavg(values.tail, period)
(rest.head + ((values.head - values(period)))):: rest
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我得到了
List(12.0, 18.0, 24.0, 33.0, 36.0, 33.0, 26.0, 26.0, 26.0, 26.0
Run Code Online (Sandbox Code Playgroud)
这是不正确的。我不想使用 Pyspark 来获得结果。有人可以帮忙吗? …
我有一个数据帧:
ID DATE WIN
A 2015/6/5 Yes
A 2015/6/7 Yes
A 2015/6/7 Yes
A 2015/6/7 Yes
B 2015/6/8 No
B 2015/8/7 Yes
C 2015/5/15 Yes
C 2015/5/30 No
C 2015/7/30 No
C 2015/8/03 Yes
Run Code Online (Sandbox Code Playgroud)
我想添加一个列,计算ID过去1个月内每个胜利的数量,结果如下:
ID DATE WIN NumOfDaysSinceLastWin NumOfWinsInThePast30days
A 2015/6/5 Yes 0 0
A 2015/6/7 Yes 2 1
A 2015/6/7 Yes 2 1 or (A 2015/6/7 Yes 0 2)
A 2015/6/8 No 1 3
B 2015/8/7 No 0 0
B 2015/8/7 Yes 0 0
C 2015/5/15 …Run Code Online (Sandbox Code Playgroud) set.seed(123)
df <- data.frame(x = sample(1:10, 20, replace = T), id = rep(1:2, each = 10))
Run Code Online (Sandbox Code Playgroud)
对于每个id,我想创建一个具有前5个x值之和的列.
df %>% group_by(id) %>% mutate(roll.sum = c(x[1:4], zoo::rollapply(x, 5, sum)))
# Groups: id [2]
x id roll.sum
<int> <int> <int>
3 1 3
8 1 8
5 1 5
9 1 9
10 1 10
1 1 36
6 1 39
9 1 40
6 1 41
5 1 37
10 2 10
5 2 5
7 2 7 …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据框,
df
col1 col2
A 1
B 3
C 2
D 5
E 6
F 8
G 10
Run Code Online (Sandbox Code Playgroud)
我想添加 col2 的特定值的上一个和下一个 n 值并将其存储到一个新列中,
所以,如果 n=2,那么数据框应该是这样的,
col1 col2 col3
A 1 6 (only below 2 values are there no upper values, so adding 3 numbers)
B 3 11 (adding one prev, current and next two)
C 2 17(adding all 4 values)
D 5 24(same as above)
E 6 31(same as above)
F 8 29(adding two prev and next one as only …Run Code Online (Sandbox Code Playgroud)