【问题标题】:Finding and mapping duplicates in a pandas groupby object在 pandas groupby 对象中查找和映射重复项
【发布时间】:2017-07-22 05:47:57
【问题描述】:

我有 2 列,User_ID 和 Item_ID。现在我想创建一个新列“Reordered”,其中包含 0 或 1 的值。0 表示特定用户仅订购了一次商品,1 表示特定用户多次订购商品。 我认为这可以通过对 User_ID 进行分组,然后使用 apply 函数将重复项映射为 1 而非重复项映射为 0 来完成,但我无法为此找出正确的 python 代码。 如果有人可以请帮助我。

【问题讨论】:

  • 你能分享一下你到目前为止写的代码吗?或您面临的问题

标签: python pandas duplicates pandas-groupby


【解决方案1】:

您可以将Series.duplicated 与参数keep=False 一起用于所有重复项 - 输出为Trues 和Falses。最后由astype转换为ints:

df['Reordered'] = df['User_ID'].duplicated(keep=False).astype(int)

示例:

df = pd.DataFrame({'User_ID':list('aaabaccd'),
                   'Item_ID':list('eetyutyu')})

df['Reordered'] = df['User_ID'].duplicated(keep=False).astype(int)
print (df)
  Item_ID User_ID  Reordered
0       e       a          1
1       e       a          1
2       t       a          1
3       y       b          0
4       u       a          1
5       t       c          1
6       y       c          1
7       u       d          0

或者可能需要DataFrame.duplicated 来检查每个用户duplicates

df['Reordered'] = df.duplicated(['User_ID','Item_ID'], keep=False).astype(int)
print (df)
  Item_ID User_ID  Reordered
0       e       a          1
1       e       a          1
2       t       a          0
3       y       b          0
4       u       a          0
5       t       c          0
6       y       c          0
7       u       d          0

【讨论】:

  • 我认为是第二个
  • 是的,第二个非常适合我。非常感谢@jezrael
猜你喜欢
  • 1970-01-01
  • 2020-05-05
  • 2020-03-07
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2021-02-24
  • 2021-07-21
  • 1970-01-01
相关资源
最近更新 更多