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