我有很多重复的类别,每个类别由不同的权重组成,我想根据优先级为每个唯一类别分配1个权重。
mydata
category original_wt predicted_wt categorized categorized_value
1 xxxxx 2.5 3.0 original 2.5
2 yyyyy 3.5 4.0 predicted 4.0
3 zzzzz 3.0 5.0 predicted 5.0
4 aaaaa 4.0 2.5 original 4.0
5 bbbbb 3.2 5.5 original 3.2
6 ccccc 4.6 3.5 predicted 3.5
7 xxxxx 2.5 4.0 original 2.5
8 xxxxx 4.0 5.5 predicted 5.5
9 yyyyy 2.5 4.0 predicted 4.0
10yyyyy 3.0 2.0 predicted 2.0
11aaaaa 5.0 4.5 original 5.0
对于eg1:对于类别' xxxxx'我们有三个分类值(2.5,2.5,5.5) 因此,我们必须优先考虑2.5因为它重复了 eg2:对于某个类别' yyyyy'我们有三个分类值(4.0,4.0,2.0) 因此,我们必须优先考虑2.0,因为它是最重复的
但如果我们在类别中只有一个项目,它应该保持不变。 如果我们有两个具有两个不同权重的项目,我们应该保持高分类值
Expected output:
mydata
category original_wt predicted_wt categorized categorized_value
1 xxxxx 2.5 3.0 original 2.5
2 yyyyy 3.5 4.0 predicted 4.0
3 zzzzz 3.0 5.0 predicted 5.0
4 aaaaa 4.0 2.5 original 4.0
5 bbbbb 3.2 5.5 original 3.2
6 ccccc 4.6 3.5 predicted 3.5
7 aaaaa 5.0 4.5 original 5.0
Tried:
category_grouping_by_catg_value = mydata.groupby(['category','categorized_value']).apply(pd.DataFrame.mode).reset_index(drop=True).
通过以上操作,我得到一些随机值 我怎么能在python中做到这一点。
答案 0 :(得分:0)
您可能会考虑这样做:
df['mode'] = df.groupby('category')['categorized_value'].transform(pd.Series.mode)
df['mode'] = df.groupby('category')['mode'].transform(max)
print df.drop_duplicates(['category', 'mode']).set_index('category').sort_index()[['categorized_value', 'mode']]
更新了代码,以便在执行categorized_value
后剩下几个时选择.mode
的最大值。
categorized_value mode
category
aaaaa 4.0 5.0
bbbbb 3.2 3.2
ccccc 3.5 3.5
xxxxx 2.5 2.5
yyyyy 4.0 4.0
zzzzz 5.0 5.0