![](/img/trans.png)
[英]Problem in getting the most frequent value row-wise in a Dataframe with Pandas
[英]Replacing a row value with the most frequent value in Pandas Dataframe
我有如下數據框:
| 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)
列“類型”實際上是“類型列表”的扁平列。 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(項目),Q571(項目)”。 因此,我想檢查這兩種類型的頻率,分別是29和9。 並在該行的superType列中分配最常見的類型,在這種情況下為Q11424。
通過使用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.