簡體   English   中英

用Pandas Dataframe中最頻繁的值替換行值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM