给出这样的数据集:
pd.DataFrame([["2013-01-01", 4, 1000, 1],
["2013-01-02", 8, 500, 1],
["2013-01-03", 4, 1000, -1],
["2013-01-04", 4, 1000, 1],
["2013-01-05", 3, 300, 1]],
columns=["date", "shop_id", "item_id", "item_count"])
我们有item_count
变量,无论是正面还是负面。 积极表示该商品已售出且表示该商品已退回。
我想要删除返回相同项的行。例如,在上面的数据帧中,具有id 0和2的行将相互抵消,但具有id 3的行将保留。我怎样才能做到这一点?我虽然解决方案很少,但它们涉及使用.apply()
并且对大型数据集效率不高。感谢
答案 0 :(得分:1)
由于退货商品始终带有订购商品,因此您可以使用shift
最多本地商品退回
df[(df.groupby('shop_id').item_count.shift(-1).fillna(1).ne(-1))&(df.item_count.ne(-1))]
Out[247]:
date shop_id item_id item_count
1 2013-01-02 8 500 1
3 2013-01-04 4 1000 1
4 2013-01-05 3 300 1
更新:
df.groupby(['shop_id','item_id']).agg({'item_count':'sum','date':'last'})
Out[249]:
date item_count
shop_id item_id
3 300 2013-01-05 1
4 1000 2013-01-04 1
8 500 2013-01-02 1