用Pandas Dataframe中最频繁的值替换行值

时间:2017-10-12 14:38:10

标签: python pandas dataframe group-by max

我的数据框如下:

   |            types | freq   |     TypeList
0  |    Q11424 (item) |   29   |   Q11424 (item),Q571 (item)
1  |      Q571 (item) |   9    |   Q11424 (item),Q571 (item)
0  |    Q11012 (item) |   6    |   Q11012 (item)
0  |  Q4830453 (item) |   39   |   Q4830453 (item)
0  |  Q7725634 (item) |   2    |   Q7725634 (item),Q571 (item)
1  |      Q571 (item) |   9    |   Q7725634 (item),Q571 (item)
0  |   Q785479 (item) |   1    |   Q785479 (item),Q1344 (item)
1  |     Q1344 (item) |   1    |   Q785479 (item),Q1344 (item)

列'types'实际上是'TypeList'的扁平列。 freq列表示列类型中每个值的频率。这些频率来自整个数据帧。在这里,我只是添加了几行。例如。 Q571在类型列中出现了9次,因此freq = 9。 TypeList列是每条记录的类型列表。我想添加新列SuperType,如果TypeList列包含多个类型,它将具有最常见的类型。例如。我想要以下结果:

   |            types | freq   |     TypeList                   |SuperType
0  |    Q11424 (item) |   29   |   Q11424 (item),Q571 (item)    | Q11424
1  |      Q571 (item) |   9    |   Q11424 (item),Q571 (item)    | Q11424
0  |    Q11012 (item) |   6    |   Q11012 (item)                | Q11012
0  |  Q4830453 (item) |   39   |   Q4830453 (item)              | Q4830453
0  |  Q7725634 (item) |   2    |   Q7725634 (item),Q571 (item)  | Q571
1  |      Q571 (item) |   9    |   Q7725634 (item),Q571 (item)  | Q571
0  |   Q785479 (item) |   1    |   Q785479 (item),Q1344 (item)  | Q785479
1  |     Q1344 (item) |   1    |   Q785479 (item),Q1344 (item)  | Q785479

在第一行中,TypeList列具有值“Q11424(item),Q571(item)”。所以我想检查这两种类型的频率,即29和9。并为该行的superType列分配最常用的类型,在这种情况下为Q11424。

1 个答案:

答案 0 :(得分:1)

使用transform

df['SuperType']=df.sort_values('freq').groupby('TypeList')['types'].transform('last')
df['SuperType']=df.SuperType.str[:-6]
df.sort_index()
Out[1124]: 
             types  freq                     TypeList  SuperType
0    Q11424 (item)    29    Q11424 (item),Q571 (item)    Q11424 
1      Q571 (item)     9    Q11424 (item),Q571 (item)    Q11424 
2    Q11012 (item)     6                Q11012 (item)    Q11012 
3  Q4830453 (item)    39              Q4830453 (item)  Q4830453 
4  Q7725634 (item)     2  Q7725634 (item),Q571 (item)      Q571 
5      Q571 (item)     9  Q7725634 (item),Q571 (item)      Q571 
6   Q785479 (item)     1  Q785479 (item),Q1344 (item)     Q1344 
7     Q1344 (item)     1  Q785479 (item),Q1344 (item)     Q1344 

编辑:

df=df.sort_values('freq')
df['SuperType']=df.groupby('TypeList')['types'].transform('last').values
df['SuperType']=df.SuperType.str[:-6]