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

2024-04-20 13:37:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建一个表,然后操作一些值—一列是类别,另一列是与类别关联的项。对于每个类别,我想取最常见的项目表示。但是,如果一个项目在另一个类别中出现的频率更高,我想选择下一个得分最好的项目。所以,根据代码:

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

Tags: columns项目inimportdfforasnp