Python 熊猫-用第二天的值填充新列

Python 熊猫-用第二天的值填充新列,python,pandas,Python,Pandas,在下面的数据帧中 #Create data data = {'Day': [1,1,2,2,3,3], 'Where': ['A','B','A','B','B','B'], 'What': ['x','y','x','x','x','y'], 'Dollars': [100,200,100,100,100,200]} index = range(len(data['Day'])) columns = ['Day','Where','What'

在下面的数据帧中

#Create data
data = {'Day': [1,1,2,2,3,3],
        'Where': ['A','B','A','B','B','B'],
        'What': ['x','y','x','x','x','y'],
        'Dollars': [100,200,100,100,100,200]}

index = range(len(data['Day']))

columns = ['Day','Where','What','Dollars']


df = pd.DataFrame(data,  index=index, columns=columns)
df

我想添加一个包含未来值的列。在这种情况下,第一个值应该是100,因为在第2天,A x的售价为100美元。完整列应包含值
100、无、无、100、无、无

我想我可以用下面的方法索引单元格

df2 = df
df2['Tomorrow_Dollars'] = df[df.Day == df2.Day+1,'Dollars']
但这会引发以下错误

TypeError:“Series”对象是可变的,因此无法对其进行散列


有没有解决这个问题的方法或更智能的方法?

的想法是添加创建缺少的组合,通过为唯一的
重塑,这样就有可能
shift
。对于新列,最后一次向后重塑并加入
join

df1 = df.set_index(['Day','Where','What'])
mux = pd.MultiIndex.from_product(df1.index.levels, names=df1.index.names)

s = df1.reindex(mux)['Dollars'].unstack([1,2]).shift(-1).unstack().rename('Tomorrow_Dollars')

df = df.join(s, on=['Where','What','Day'])
print (df)
   Day Where What  Dollars  Tomorrow_Dollars
0    1     A    x      100             100.0
1    1     B    y      200               NaN
2    2     A    x      100               NaN
3    2     B    x      100             100.0
4    3     B    x      100               NaN
5    3     B    y      200               NaN

请添加您的预期输出。@coldspeed,请注意,我添加了:一列有100,无,无,100,无,无。对不起,如果它有点隐蔽的话:哦,我不可能那样做!非常感谢。你能简单地解释一下我出错的原因吗?@shamalaia-当然,错误更正很简单-
df.loc[df.Day==df2.Day+1,'Dollars']
-它与选择列
Dollars
链接在一起。不幸的是,缺少一些值,因此需要像我的答案中那样重新索引。