熊猫:合并2行

时间:2018-03-11 23:55:59

标签: python pandas dataframe

给出这样的数据集:

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"])

enter image description here

我们有item_count变量,无论是正面还是负面。 积极表示该商品已售出表示该商品已退回

我想要删除返回相同项的行。例如,在上面的数据帧中,具有id 0和2的行将相互抵消,但具有id 3的行将保留。我怎样才能做到这一点?我虽然解决方案很少,但它们涉及使用.apply()并且对大型数据集效率不高。感谢

1 个答案:

答案 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