我有一个类似于此的数据框,它按订单簿的订单信息存储订单。键入N =新订单,D =删除订单,E =执行。可以重复使用相同的order_id。
所以基本上问题是删除和执行没有适当的价格,因为它们应该由具有相同oid的最后一个新订单推断。有人会建议一种方法来实现这一目标吗?谢谢
输入
type order_id price
0 N 10 99
1 E 10 0
1 E 10 0
1 D 10 0
0 N 11 98
1 N 10 97
1 D 10 0
输出
type order_id price
0 N 10 99
1 E 10 **99**
1 E 10 **99**
1 D 10 **99**
0 N 11 98
1 N 10 97
1 D 10 **97**
答案 0 :(得分:1)
好像你需要replace
+ ffill
,因为在这里我假设你有正确的df顺序。
df.replace(0,np.nan).ffill()
Out[758]:
type order_id price
0 N 10 99.0
1 E 10 99.0
1 E 10 99.0
1 D 10 99.0
0 N 11 98.0
1 N 10 97.0
1 D 10 97.0
或者我们添加groupby
df.assign(price=df.price.replace(0,np.nan)).groupby(df.type.eq('N').cumsum()).price.ffill().values
答案 1 :(得分:1)
我认为需要:
df['price'] = df['price'].mask(df['type'].isin(['E','D']))
#df['price'] = df['price'].where(df['type'] == 'N')
df['price'] = df.groupby(df['order_id'].ne(df['order_id'].shift()).cumsum())['price'].ffill()
print (df)
type order_id price
0 N 10 99.0
1 E 10 99.0
1 E 10 99.0
1 D 10 99.0
0 N 11 98.0
1 N 10 97.0
1 D 10 97.0
<强>解释强>: