我正在寻找一种有效的方法来根据来自不同列的前一行的值来设置新列。假设你有这个DataFrame:
pd.DataFrame([[0, 22], [1, 15], [2, 18], [3, 9], [4, 10], [6, 11], [8, 12]],
columns=['days', 'quantity']) days quantity
0 0 22
1 1 15
2 2 18
3 3 9
4 4 10
5 6 11
6 8 12现在,我想要有第三列‘quantity_3day_ago’,如下所示:
days quantity quantity_3days_ago
0 0 22 NaN
1 1 15 NaN
2 2 18 NaN
3 3 9 22
4 4 10 15
5 6 11 9
6 8 12 10因此,我需要使用“天”栏来检查“数量”栏在3天前显示的内容。如果'days‘列中没有确切的值,我希望'quantity_3days_ago’是前一行的值。以最后一行为例:8-3将是5,在这种情况下,我会将天数等于4的行的'quantity‘值作为’quantity_3day_ago‘。我希望这是可以理解的。我试着使用滚动窗口和移位,但我不能得到想要的结果。我猜在整个DataFrame上使用循环是可能的。然而,这将是相当低效的。我想知道这是否可以在一行中完成。感谢您的帮助!
发布于 2021-11-17 19:50:25
我们可以在shift之前做reindex
rng = range(df.days.iloc[0],df.days.iloc[-1]+1)
df['new'] = df.days.map(df.set_index('days').reindex(rng ,method='ffill')['quantity'].shift(3))
df
Out[125]:
days quantity new
0 0 22 NaN
1 1 15 NaN
2 2 18 NaN
3 3 9 22.0
4 4 10 15.0
5 6 11 9.0
6 8 12 10.0https://stackoverflow.com/questions/70010512
复制相似问题