如何从熊猫表的每个类别中选择最常见的项目而不重复?

时间:2019-02-05 15:18:27

标签: python pandas

我创建一个表,然后操作一些值-一列是类别,另一列是与类别关联的项目。对于每个类别,我想代表最常见的项目。但是,如果某项目在另一个类别中的出现频率更高,那么我想选择下一个得分最高的项目。因此,给出代码:

import pandas as pd
import numpy as np
#make some data
B = []
z=1
for i in range(1,9):
    z=z*-1
    for j in range(5+z):
        B.append('Item_'+repr(i))
B = pd.DataFrame(np.array(B).reshape(40,1), columns = list("B"))
C = []
for i in range(1,5):
    for j in range(10):
        C.append('Cat_'+repr(i))
C = pd.DataFrame(np.array(C).reshape(40,1), columns = list("C"))

#construct and fiddle with dataframe
df = pd.concat([B, C], axis = 1)
df.columns = ['item', 'category']
df.loc[df['item'] == 'Item_8', 'item'] = 'Type_4'
df.loc[36, 'item'] = 'Item_9'
print(df)

礼物:

      item category
0   Item_1    Cat_1
1   Item_1    Cat_1
2   Item_1    Cat_1
3   Item_1    Cat_1
4   Item_2    Cat_1
5   Item_2    Cat_1
6   Item_2    Cat_1
7   Item_2    Cat_1
8   Item_2    Cat_1
9   Item_2    Cat_1
10  Item_3    Cat_2
11  Item_3    Cat_2
12  Item_3    Cat_2
13  Item_3    Cat_2

然后我创建一张表格以帮助可视化问题。

#make a table
tab = df.groupby(['item','category']).size().reset_index(name = 'counts')
print(tab)

     item category  counts
0  Item_1    Cat_1       4
1  Item_2    Cat_1       6
2  Item_3    Cat_2       4
3  Item_4    Cat_2       6
4  Item_4    Cat_4       5
5  Item_5    Cat_3       4
6  Item_6    Cat_3       6
7  Item_7    Cat_4       4
8  Item_9    Cat_4       1

因此,对于类别1,我想选择最常见的类别,即项目2;类别2获得项目4,以此类推。问题始于类别4-这里最常见的项目是4。但是项目4已经是类别2中最常见的项目(并且类别2中的常见程度高于类别4)。我不想重复,因此我想参加第7项。我还希望在整个类别列表中合并最常见的项目-因此,当我通过表格工作时,可能需要重新访问以前的类别。

因此结果将是:

Cat1: item2
Cat2: item4
Cat3: item6
Cat4: item7

0 个答案:

没有答案