Ich habe Daten über das Vorhandensein einer Reihe von Metaboliten in verschiedenen Abteilungen eines Systems. Ich habe auch Informationen darüber, welcher Typ die einzelnen Metaboliten sind. Ich möchte eine Häufigkeitstabelle, die die Anzahl der Metaboliten jedes Typs in jedem Kompartiment zeigt. Die Daten in etwa so aussehen:Pandas Häufigkeitstabelle basierend auf mehreren Kreuztabellen
df = pd.DataFrame({'met_id':['met_a','met_b','met_c','met_d','met_e','met_f'],
'met_type':['amino_acid','amino_acid','lipid','lipid','peptide','peptide'],
'comp_1':[True,False,True,True,False,True],
'comp_2':[False,True,True,False,True,True]})
print df
gibt
comp_1 comp_2 met_id met_type
0 True False met_a amino_acid
1 False True met_b amino_acid
2 True True met_c lipid
3 True False met_d lipid
4 False True met_e peptide
5 True True met_f peptide
ich eine Übersichtstabelle wollen (oder Datenrahmen) wie folgt aus:
met_type comp_1 comp_2
amino_acid 1 1
lipid 2 1
peptide 1 2
angibt, wie viele von jeder Art von Metaboliten in jedem Fach. Ich kann die Zählungen mit Kreuztabellen- erhalten somit:
pd.crosstab(df_test.met_type,df_test.comp_1)[True]
gibt
met_type
amino_acid 1
lipid 2
peptide 1
Name: True, dtype: int64
und ich denke, ich jede dieser Serie verketten kann, aber gibt es eine saubere Art und Weise eine Tabelle mit Zählungen für alle zu schaffen, die Fachsäulen?
Ah, das funktioniert auf m Ich habe ein Beispiel, aber in meinem realen Dataset haben 'comp_1' und 'comp_2' einen booleschen Typ, daher erhalte ich den Fehler 'DataError: Keine numerischen Typen zum aggregieren'. Ich werde meine Frage bearbeiten, um das klarzustellen - gibt es einen ähnlichen Ansatz für Booleans? –
Können Sie den realen Datensatz zeigen – Dark
Sorry, eigentlich denke ich das Problem ist, dass es NaNs in den booleschen Listen gibt, die Ihre Antwort brechen. Ich kann nur die NaNs mit Falses für die Zwecke der Zusammenfassung ersetzen und es funktioniert super! Ich akzeptiere deine Antwort und konvertiere die NaNs. –