【发布时间】:2018-10-31 02:27:16
【问题描述】:
基本上,我希望它对两列 (['id1','id2]) 中的所有 id 进行分组,并从列 ['value1',' 中获取它们各自值的滚动总和(来自过去的 2 行)值2']
df:
id1 id2 value1 value2
-----------------------------------
a b 10 5
c a 5 10
b c 0 0
c d 2 1
d a 10 20
a c 5 10
b a 10 5
a b 5 2
c a 2 5
d b 5 2
df (if df.id = 'a') -- 只是为了简化我只显示 id 'a':
id1 id2 value1 value2 a.rolling.sum(2)
-----------------------------------------------------
a b 10 5 NaN
c a 5 10 20
d a 10 20 30
a c 5 10 25
b a 10 5 10
a b 5 2 10
c a 2 5 10
期望 df(包括列 ['id1','id2'] 中的所有 id):
id1 id2 value1 value2 a.rolling.sum(2) b.rolling.sum(2) c.rolling.sum(2)
---------------------------------------------------------------------------------------------
a b 10 5 NaN NaN NaN
c a 5 10 20 NaN NaN
b c 0 0 NaN 5 5
c d 2 1 NaN NaN 2
d a 10 20 30 NaN NaN
a c 5 10 25 NaN 12
b a 10 5 10 10 NaN
a b 5 2 10 12 NaN
c a 2 5 10 NaN 12
d b 5 2 NaN 4 NaN
最好我需要一个 groupby 函数来分配与 x.rolling(2) 相关的所有 id,因为原始数据集有数百个要计算的 id。
【问题讨论】:
-
您可以在其他帖子中使用 W-B 的解决方案。在定义
s之后,您可以使用s.unstack(0)来获取所有内容的滚动总和,然后您可以将其连接到原始DataFrame。 -
我正在考虑它,但它是按“id1”分组的。我想知道您是否可以按两个 id 列对其进行分组
-
不,不是。这些列被重命名(可能是误导性的),因此您从 4 列格式变为每个 id-value 对只有 2 列,无论该对是 id1-value1 还是 id2-value2。我建议你看看
pd.concat([df1,df2])的输出,只是为了让自己相信发生了什么。 -
pd.concat([df,s.unstack(0)['value1']],axis=(1))现在完美运行。没听说过unstack。谢谢
标签: python pandas pandas-groupby