2017-10-12 4 views
0

Ersetzen habe ich Datenrahmen wie folgt:einen Zeilenwert mit dem häufigsten Wert in Pandas Datenrahmen

|   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) 

Spalte ‚Typen‘ tatsächlich eine abgeflachte Säule von ‚Typelist‘ ist. Und die Häufigkeitsspalte zeigt die Häufigkeit jedes Werts in Spaltentypen an. Diese Frequenzen stammen vom gesamten Datenrahmen. Hier füge ich nur einige dieser Zeilen hinzu. Z.B. Q571 ist 9 Mal in der Spalte types aufgetreten und hat daher freq = 9. TypeList-Spalte ist eine Liste von Typen für jeden Datensatz. Ich möchte eine neue SuperType-Spalte hinzufügen, die den häufigsten Typ hat, wenn die TypeList-Spalte mehr als einen Typ enthält. Z.B. Ich mag folgendes Ergebnis:

|   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 

In der ersten Zeile hat Typelist Spaltenwert "Q11424 (Artikel), Q571 (Punkt)". Also möchte ich die Frequenzen dieser beiden Typen, d. H. 29 bzw. 9, überprüfen. und weisen Sie den häufigsten Typ in der superType-Spalte für diese Zeile zu, d. h. Q11424 in diesem Fall.

Antwort

1

von 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 

bearbeiten mit:

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

@ScottBoston bearbeitet .. – Wen

+0

Ich erhalte "Valueerror: kann nicht von einer doppelten Achse indizieren" Ausnahme nach der ersten Zeile ausgeführt wird. Die Ausnahme tritt nur auf, wenn ich versuche, den Wert df ['superType'] zuzuweisen, sonst funktioniert es. –

+0

@NilakshiNaphade versuchen mein bearbeiten – Wen

Verwandte Themen