我的数据框如下:
| 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。
答案 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]