Pandas: .groupby().size() und Prozentsätze
Ich habe einen DataFrame, der stammt aus einem df.groupby().size()
Betrieb, und sieht wie folgt aus:
Localization RNA level
cytoplasm 1 Non-expressed 7
2 Very low 13
3 Low 8
4 Medium 6
5 Moderate 8
6 High 2
7 Very high 6
cytoplasm & nucleus 1 Non-expressed 5
2 Very low 8
3 Low 2
4 Medium 10
5 Moderate 16
6 High 6
7 Very high 5
cytoplasm & nucleus & plasma membrane 1 Non-expressed 6
2 Very low 3
3 Low 3
4 Medium 7
5 Moderate 8
6 High 4
7 Very high 1
Was ich will zu tun ist, um die Berechnung der getrennten vorkommen (d.h. die Letzte Spalte aus .size()
) als Prozentsatz der Gesamtanzahl der vorkommen in den geltenden Localization
.
Zum Beispiel: es gibt insgesamt 50 vorkommen in der cytoplasm
Lokalisierung (7 + 13 + 8 + 6 + 8 + 2 + 6), nachgeben, 14 und 26 % für die Non-expressed
und Very low
RNA-levels, respectively.
Ist es ein schöner Weg, dies zu tun? Ich habe schon darüber mit, was ich denke, ist ein sehr Umweg, D. H. einen neuen DataFrame für jeden Localization
und arbeiten von dort aus, aber es gibt eine Menge von Linien und das problem, dass Sie alle verbinden die daraus resultierenden DataFrames in die Ende. Ich hoffe, es gibt eine intelligentere Art und Weise, es zu tun, mindestens!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist das komplette Beispiel basiert auf pandas
groupby
,Summe
Funktionen.Die grundlegende Idee ist die Gruppierung von Daten basierend auf
'Localization'
und anwenden einer Funktion auf die Gruppe.df['RNA level'].str.strip()
für Vektorgrafik-string-Reinigung (statt Wandler), unddf['Size'].astype(int)
für vektorisierte int Konvertierungendf.groupby('Localization')['Size'].transform(lambda x: x/len(x))
df.groupby('Localization')['Size'].transform(lambda x: x/sum(x))