如何使用Python删除数据框中的重复项

时间:2018-06-06 05:11:49

标签: python python-3.x pandas duplicates

所以数据框是

Product    Price  Weight  Range   Count
   A        40      20      1-3     20
   A        40      20      4-7     23
   B        20      73      1-3     54
   B        20      73      4-7     43
   B        20      73      8-15    34
   B        20      73      >=16    12
   C        10      20      4-7     22

所以基本上有一个价格和重量的产品,此处的范围指定产品连续销售的天数,而计数指定在该范围内销售的产品数量

预期产出

Product    Price  Weight  Range   Count
   A        40      20      1-3     20
                            4-7     23
   B        20      73      1-3     54
                            4-7     43
                            8-15    34
   B        20      73      >=16    12
   C        10      20      4-7     22

   Product  Price  Weight  1-3   4-7   8-15  >=16
   A        40      20     20     23   NaN    NaN
   B        20      73     54     43   34     1
   C        10      20      0     22   NaN    NaN                     

3 个答案:

答案 0 :(得分:3)

实现第二个输出比第一个输出更有意义。使用set_index,然后使用unstack

(df.set_index(['Product', 'Price', 'Weight', 'Range'])
  .Count
  .unstack(fill_value=0)
  .reset_index()
)

Range Product  Price  Weight  1-3  4-7  8-15  >=16
0           A     40      20   20   23     0     0
1           B     20      73   54   43    34    12
2           C     10     100    0   22     0     0

答案 1 :(得分:2)

在我看来,如果以后需要进程DataFrame,建议不要使用第一个解决方案。

第二种解决方案要好得多,如果实际数据中的重复是必要的聚合值,例如sum

#convert catagoricals to strings
df['Range'] = df['Range'].astype(str)

df = (df.groupby(['Product', 'Price', 'Weight', 'Range'])['Count']
        .sum()
        .unstack(fill_value=0)
        .reset_index())
print (df)
Range Product  Price  Weight  1-3  4-7  8-15  >=16
0           A     40      20   20   23     0     0
1           B     20      73   54   43    34    12
2           C     10      20    0   22     0     0

答案 2 :(得分:1)

试试这个,

mask=df.duplicated(subset=['Product'])
df.loc[mask,['Product','Price','Weight']]=''

输出:

  Product Price Weight Range  Count
0       A    40     20   1-3     20
1                        4-7     23
2       B    20     73   1-3     54
3                        4-7     43
4                       8-15     34
5                       >=16     12
6       C    10    100   4-7     22

pd.pivot_table(df,index=['Product','Price','Weight'],columns='Range',values='Count').reset_index()

输出:

Range Product  Price  Weight   1-3   4-7  8-15  >=16
0           A     40      20  20.0  23.0   NaN   NaN
1           B     20      73  54.0  43.0  34.0  12.0
2           C     10     100   NaN  22.0   NaN   NaN