我有一个类似这样的想法:
x y
1 0
5 1
3 0
2 0
5 1
6 0
1 0
4 0
3 1
我正在尝试创建一个新列,该列包含x
和y
中的最后2个、当前和下2个元素。应该是这样的:
x y seq
1 0 [(nan, nan), (nan, nan), (1, 0), (5,1), (3,0)]
5 1 [(nan, nan), (1, 0), (5, 1), (3,0), (2,0)]
3 0 [(1, 0), (5, 1), (3, 0), (2,0), (5,1)]
2 0 [(5, 1), (3, 0), (2, 0), (5,1), (6,0)]
5 1 [(3, 0), (2, 0), (5, 1), (6,0), (nan, nan)]
6 0 [(2, 0), (5, 1), (6, 0), (nan, nan),(nan, nan)]
我写道:
def sequences(df):
back2 = (df.x.shift(2), df.y.shift(2))
back1 = (df.x.shift(1), df.y.shift(1))
current = (df.x, df.y)
forward1 = (df.x.shift(-1), df.y.shift(-1))
forward2 = (df.x.shift(-2), df.y.shift(-2))
return [back2, back1, current, forward1, forward2]
df['data_sequence'] = df.apply(sequences, axis=1)
但是.shift()
在df.apply()
中失败,因为它将每个项视为一个int
,而不是序列中的一个元素。我如何做到这一点
你可以做:
df:
输出:
按照您正在执行的方法,代码没有SomeDude的代码干净,但是工作:
相关问题 更多 >
编程相关推荐