我创建一个表,然后操作一些值—一列是类别,另一列是与类别关联的项。对于每个类别,我想取最常见的项目表示。但是,如果一个项目在另一个类别中出现的频率更高,我想选择下一个得分最好的项目。所以,根据代码:
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
目前没有回答
相关问题 更多 >
编程相关推荐