Ich habe diesen Datenrahmen, den ich in eine Pivot-Tabelle zu verwandeln. Kein Problem. Pandas bietet pivot/pivot_table an, die es erlauben, schöne Pivot-Tabellen zu erstellen, aber es gibt einige Features von Excel, die ich nicht zu replizieren glaube.Wie pandas groupby und pivot_table, um Pivto-Tabellen zu haben aussehen wie Excel
welche? die auf halbem Weg Aggregate (die in division_sac_ac
gesehen Gesamtsummen) und
slice_ac = df.groupby(by='ac').sum()
slice_sac = df.groupby(by='sac').sum()
durch
erhalten Wie kann ich die 3 (Pivot, slice_ac, slice_sac) Objekte integrieren?EDIT: Teiler, aber immer noch nicht zufrieden stellend (Teil weil ich slice_sac
integrieren konnte aber nicht slice_ac
- und in der Regel die aestetichs von allem ist Meilen von Excel entfernt):
table_df = pd.pivot_table(df, index=['ac','sac'], values='value', columns=['name'], aggfunc=[np.sum], margins=True)
print(table_df.stack(['name']))
, die ergeben:
sum
ac sac name
bond Corp omega 0.05
All 0.05
Govt lambda 0.05
rho 0.20
All 0.25
equity Europe alfa 0.05
beta 0.05
gamma 0.10
All 0.20
US epsilon 0.20
All 0.20
All alfa 0.05
beta 0.05
epsilon 0.20
gamma 0.10
lambda 0.05
omega 0.05
rho 0.20
All 0.70
Beispiel:
import pandas as pd
import numpy as np
division_sac_ac = {'equity': ['Europe', 'US'], 'bond': ['Corp', 'Govt']}
df = pd.DataFrame.from_dict({'record_1': ['alfa', 'Europe', 'equity', 0.05],
'record_2': ['beta', 'Europe', 'equity', 0.05],
'record_3': ['gamma', 'Europe', 'equity', 0.1],
'record_4': ['epsilon', 'US', 'equity', 0.2],
'record_5': ['rho', 'Govt', 'bond', 0.2],
'record_6': ['lambda', 'Govt', 'bond', 0.05],
'record_7': ['omega', 'Corp', 'bond', 0.05], }, orient='index')
df.columns = ['name', 'sac', 'ac', 'value']
table_df = pd.pivot_table(df, index=['ac','sac','name'], values='value', aggfunc=[np.sum])
slice_ac = df.groupby(by='ac').sum()
slice_sac = df.groupby(by='sac').sum()
print(table_df)
print(slice_ac)
print(slice_sac)
table_df
macht den Job, aber ich würde auch auf halbem Wege Ergebnisse (slice_ac, slice_sac
) in diesem Bild gezeigt integrieren möchten:
während meiner Ausgabe ist mehr wie:
sum
ac sac name
bond Corp omega 0.05
Govt lambda 0.05
rho 0.20
equity Europe alfa 0.05
beta 0.05
gamma 0.10
US epsilon 0.20
value
ac
bond 0.3
equity 0.4
value
sac
Corp 0.05
Europe 0.20
Govt 0.25
US 0.20
ausgezeichnet! Danke – Asher11