【问题标题】:Column value replacement based on duplicate values基于重复值的列值替换
【发布时间】:2020-10-17 19:53:58
【问题描述】:

在我的数据集中,我有OrderID 列和OrderTotal 列。

我有重复的OrderIDs。我不想删除重复项,相反,我想使用OrderID 的第一个实例保留订单总计的值,并在OrderID 有其他重复项时将OrderTotal 的值替换为0。

这是我所做的:

duplicate=df.OrderID.duplicated(keep='first')
df['OrderTotal']=np.where((duplicates =='True'), 0 ,df['OrderTotal'])

我遇到了这个错误:

usr/local/lib/python3.6/dist-packages/pandas/core/ops/array_ops.py:253:FutureWarning:元素比较失败;而是返回标量,但将来将执行元素比较 res_values = 方法(右值)

【问题讨论】:

  • 你有什么问题?
  • 它没有产生结果,产生错误
  • 哪个错误?请edit问题并显示错误,包括完整的回溯。
  • 'True'改成True应该没有问题

标签: python pandas duplicates


【解决方案1】:
d={'OrderID':['a','a','a','b','b','c','c','c','d','d'],
    'OrderTotal':[2355, 1546,987,2451, 571,3859,1876, 1239,2836,2395]}
data=pd.DataFrame(data=d)
print(data)
   OrderID  OrderTotal
0        a        2355
1        a        1546
2        a         987
3        b        2451
4        b         571
5        c        3859
6        c        1876
7        c        1239
8        d        2836
9        d        2395

使用 numpy.where()

duplicates=data['OrderID'].duplicated(keep='first')
data['OrderTotal']=np.where((duplicates==True), 0 ,data['OrderTotal'])

使用 DataFrame.where()

duplicates=data['OrderID'].duplicated(keep='first')
data['OrderTotal']=data['OrderTotal'].where(duplicates== False, 0)

更新了两种情况的数据框,

print(data)
   OrderID  OrderTotal
0        a        2355
1        a           0
2        a           0
3        b        2451
4        b           0
5        c        3859
6        c           0
7        c           0
8        d        2836
9        d           0

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多