我有一个数据帧:
c1 Lag Val1
A 3 10
A 1 5
A 2 20
A 2 15
A 1 10
B 1 25
B 2 10
我想创建一个新的字段val2,这样val2中的每个值都是val2中的值,并按滞后行数进行移位。这里比较棘手的部分是移位应该发生在字段c1中定义的组中,这样输出看起来像
c1 Lag Val1 Val2
A 3 10 15
A 1 5 20
A 2 20 10
A 2 15 NaN
A 1 10 NaN
B 1 25 10
B 2 10 NaN
我一直在尝试
df['Val2'] = df.groupby(['c1'])['Val1'].apply(lambda x:x.shift(df.Lag))
没有用,得到一个“一系列的真值是模糊的。”错误。谢谢你的帮助。谢谢!你知道吗
您可以通过self-
merge
和对索引的一点操作来实现这一点:输出:
您很可能需要为apply编写自己的函数。这样做是可行的,但可能有一种比迭代行和重复计算行移位更有效的方法。。。你知道吗
其思想是遍历groupby对象的每一行,使用
Lag
中的值来计算行移位,然后提取所需的新值。这将被存储到该行的Val2
中,并返回整个组相关问题 更多 >
编程相关推荐