【问题标题】:find duplicates and mark as variant查找重复项并标记为变体
【发布时间】:2018-09-07 09:54:55
【问题描述】:

我正在尝试创建一个数据框,在其中将重复项添加为列中的变体。为了进一步说明我的问题:

我有一个这样的熊猫数据框:

    Case    ButtonAsInteger
0   1       130
1   1       133
2   1       42
3   2       165
4   2       158
5   2       157
6   3       158
7   3       159
8   3       157
9   4       130
10  4       133
11  4       43
... ...     ...

我已经把它转换成这个形式了:

grouped = activity2.groupby(['Case'])
values = grouped['ButtonAsInteger'].agg('sum')
id_df = grouped['ButtonAsInteger'].apply(lambda x: pd.Series(x.values)).unstack(level=-1


        0       1       2       3       4       5       6       7       8       9
Case                                                                                    
1       130.0   133.0   42.0    52.0    47.0    47.0    32.0    94.0    NaN     NaN
2       165.0   158.0   157.0   141.0   142.0   142.0   142.0   142.0   142.0   147.0
3       158.0   159.0   157.0   147.0   166.0   170.0   169.0   130.0   133.0   133.0
4       130.0   133.0   42.0    52.0    47.0    47.0    32.0    94.0    NaN     NaN

现在我想找到重复项并将每个重复项标记为变体。所以在这个例子中,案例 1 和 4 应该得到变体 1。像这样:

        Variants    0       1       2       3       4       5       6       7       8       9
Case                                                                                        
1       1           130.0   133.0   42.0    52.0    47.0    47.0    32.0    94.0    NaN     NaN
2       2           165.0   158.0   157.0   141.0   142.0   142.0   142.0   142.0   142.0   147.0
3       3           158.0   159.0   157.0   147.0   166.0   170.0   169.0   130.0   133.0   133.0
4       1           130.0   133.0   42.0    52.0    47.0    47.0    32.0    94.0    NaN     NaN

我已经尝试过这个方法https://stackoverflow.com/a/44999009。但它不适用于我的数据框。不幸的是我不知道为什么。

可能会应用双 for 循环。因此,对于每一行,查看记录中是否存在重复项。这对大型记录是否有效,我不知道。

我还添加了分组程序,因为此时可能已经使用重复项?

【问题讨论】:

  • 对于那些认为这个问题是否定的人,你能告诉我为什么吗?这是我可以改变任何事情的唯一方法。
  • 我觉得你的问题很好。
  • 感谢您的反馈,
  • 不是我的反对意见。但是,如果您能更详细地解释“其他帖子不起作用”的具体含义,可能会有所帮助。它没有运行还是产生错误的结果或......?
  • @jotasi 下次我会考虑的。感谢您的反馈。

标签: python pandas numpy dataframe duplicates


【解决方案1】:

这按所有列分组并返回组索引(+ 1,因为从零开始的索引是默认值)。我想这应该是你想要的。

id_df['Variant'] = id_df.groupby(
    id_df.columns.values.tolist()).grouper.group_info[0] + 1

给定上述输入数据的结果数据框:

        0    1    2  Variant
Case                        
1     130  133   42        1
2     165  158  157        3
3     158  159  157        2
4     130  133   42        1

可能有一种语法上更好的方法来访问组索引,但我没有找到。

【讨论】:

  • 通过副本我得到变量值 1,其他所有变量只有值 0。你有什么想法吗?
  • @KoYan 我无法用您上面提供的数据真正重现它。在您的示例中,一切正常,如您所见。必须是您的示例未涵盖的问题
  • @KoYan 您的值是第一个数据帧中的整数还是第二个数据帧中的浮点数?这可能是一个浮点比较问题。如果您的值是浮点数,则应在分组之前将它们转换为整数。
  • 非常感谢!它在转换为整数后起作用。为什么上面的 apply 函数会产生浮点数?我无法理解。因为变量值仍然存在整数。
  • @KoYan 我认为问题不在于您发布的代码。我运行你的代码来旋转你发布的整数数据,我得到了整数。我只能假设您在运行该代码之前已经拥有 float dtypes。很高兴它现在对你有用。
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 2021-10-19
  • 2021-10-14
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多