我有一个包含给定日期和用户的一些度量的数据框架
>>> pd.DataFrame({"user": ['juan','juan','juan','gonzalo'], "date": [1, 2, 3, 1], "var1": [1, 2, None, 1], "var2": [None, 4, 5, 6]})
user date var1 var2
0 juan 1 1.0 NaN
1 juan 2 2.0 4.0
2 juan 3 NaN 5.0
3 gonzalo 1 1.0 6.0
现在,对于每个用户,我想为每个变量(var1,var2)提取2个最近的值,忽略NaN
,除非没有足够的值来填充数据
作为参考,这应该是上面描述的数据的结果数据帧
user var1_0 var1_1 var2_0 var2_1
juan 2.0 1.0 5.0 4.0
gonzalo 1.0 NaN 6.0 NaN
每个“历史”值被添加为带有_0
或_1
后缀的新列
您可以按
user
分组并聚合以获得最近的两个值。这几乎是所有的方式,但你有一个元素列表,而不是列。如果您想拥有实际的2列,则必须将新创建的列表拆分为列。完整代码:如有必要,首先按^{} 中的两列进行排序,并按^{} 重新整形并删除缺少的值,按^{} 过滤每个组的前2个错误,然后按^{} 创建计数器列,并在^{} 中使用展平
MultiIndex
旋转:相关问题 更多 >
编程相关推荐