我有一个包含很多行的数据库,例如:
timestamp name price profit
bob 5 4
jim 3 2
jim 2 6
bob 6 7
jim 4 1
jim 6 3
bob 3 1
数据库按时间戳排序。我希望能够添加一个新列,它将在当前值之前的price列中取最后2个值,并将它们平均为新列。因此前三行看起来像这样一个新列:
timestamp name price profit new column
bob 5 4 4.5
jim 3 2 3
jim 2 6 5
(6+3)/2 = 4.5
(2+4)/2 = 3
(4+6)/2 = 5
这不适用于学校项目或其他任何我自己正在研究的事情。我试过问过类似的问题,但我不认为我很清楚。提前谢谢!
答案 0 :(得分:1)
通过查看您想要的结果,我猜您希望在当前值之后的两个价格的平均值而不是“当前值之前的价格列中的2个值”。
我制作了timestamp
个值,你忽略了这些值。
print df
timestamp name price profit
0 2016-01-01 bob 5 4
1 2016-01-02 jim 3 2
2 2016-01-03 jim 2 6
3 2016-01-04 bob 6 7
4 2016-01-05 jim 4 1
5 2016-01-06 jim 6 3
6 2016-01-07 bob 3 1
#No need to sort if you already did.
#df.sort_values(['name','timestamp'], inplace=True)
df['new column'] = (df.groupby('name')['price'].shift(-1) + df.groupby('name')['price'].shift(-2)) / 2
print df.dropna()
timestamp name price profit new column
0 2016-01-01 bob 5 4 4.5
1 2016-01-02 jim 3 2 3.0
2 2016-01-03 jim 2 6 5.0
答案 1 :(得分:1)