首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python删除数据帧中的重复项

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

Stack Overflow用户
提问于 2018-06-06 05:11:49
回答 3查看 102关注 0票数 2

所以数据框架是

代码语言:javascript
运行
复制
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

因此,基本上有一个具有价格和重量的产品,这里的范围指定产品连续销售的天数,计数指定在该范围内销售的产品的数量。

预期产出

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
   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                     
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-06 06:17:00

在我看来,如果需要稍后处理DataFrame,则不建议使用第一种解决方案。

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

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2018-06-06 05:13:56

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

代码语言:javascript
运行
复制
(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
票数 3
EN

Stack Overflow用户

发布于 2018-06-06 05:21:08

尝尝这个,

代码语言:javascript
运行
复制
mask=df.duplicated(subset=['Product'])
df.loc[mask,['Product','Price','Weight']]=''

输出:

代码语言:javascript
运行
复制
  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

代码语言:javascript
运行
复制
pd.pivot_table(df,index=['Product','Price','Weight'],columns='Range',values='Count').reset_index()

输出:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50712636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档