查找重复项并将其标记为变体

时间:2018-09-07 09:54:55

标签: python pandas numpy dataframe duplicates

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

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

    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。但这不适用于我的数据框。不幸的是我不知道为什么。

可能有可能应用double for循环。因此,对于每一行,看看记录中是否有重复项。我不知道这在大范围内是否有效。

我还添加了分组程序,因为这时也许已经可以处理重复项了?

1 个答案:

答案 0 :(得分:0)

这将对所有列进行分组并返回组索引(+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

在语法上可以更好地访问组索引,但是我没有找到。