我正在尝试创建一个数据框,在其中将重复项作为变体添加到列中。为进一步说明我的问题:
我有一个这样的熊猫数据框:
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循环。因此,对于每一行,看看记录中是否有重复项。我不知道这在大范围内是否有效。
我还添加了分组程序,因为这时也许已经可以处理重复项了?
答案 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
在语法上可以更好地访问组索引,但是我没有找到。