2017-10-19 3 views
0

mit der Probe, das Ziel ist:einer Zusammenfassung Multiindex Pandas Dataframe

Berechnen Sie die funtions in jedem Wert von 'A', mit anderen Worten, berechnen etwas in alle Werte der Variablen in allen B Werte in jedem A Label .:

import numpy as np 
import pandas as pd 

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
           'foo', 'bar', 'foo', 'foo'], 
         'B' : ['one', 'one', 'two', 'three', 
           'two', 'two', 'one', 'three'], 
         'C' : np.random.randn(8), 
         'D' : np.random.randn(8)}) 

def var1(x): return max(x)-min(x) 
def var2(x): return (max(x)-min(x))/max(x) 
def var3(x): return (max(x)-min(x))/ len(x) 

df = df.groupby(['A','B']).agg({'C': var1, 'D': [var2, var3]}) 

output

Ziel

Die Ausgabe würde wie folgt aussehen:

A   var1  var2  var3   
bar   0.000000 -0.000000 0.000000 
foo   1,008986 -0.8572265 0.3015905 

Funktionen wie:

def var1(x): return max(x)-min(x) 
def var2(x): return (max(x)-min(x))/max(x) 
def var3(x): return (max(x)-min(x))/ len(x) 
def mean(numbers): 
    return float(sum(numbers))/max(len(numbers), 1) 

Antwort

1

IIUC:

In [8]: df 
Out[8]: 
        C   D 
       var1  var2  var3 
A B 
bar one 0.000000 0.000000 0.000000 
    three 0.000000 -0.000000 0.000000 
    two 0.000000 -0.000000 0.000000 
foo one 1.585287 0.663121 0.101220 
    three 0.000000 -0.000000 0.000000 
    two 0.799511 -0.074874 0.032681 

In [9]: df.mean(level='A') 
Out[9]: 
      C   D 
     var1  var2  var3 
A 
bar 0.000000 0.000000 0.000000 
foo 0.794933 0.196082 0.044634 

oder mit benutzerdefinierten Funktion:

In [12]: def f(col): 
    ...:  return np.mean(col) ** 2 
    ...: 

In [13]: df.groupby(level='A').apply(f) 
Out[13]: 
      C   D 
     var1  var2  var3 
A 
bar 0.000000 0.000000 0.000000 
foo 0.631918 0.038448 0.001992 
+0

ok, hast du es, aber mit einer definierten Funktion? – PeCaDe

+1

@PeCaDe, siehe aktualisierte Antwort ... – MaxU

Verwandte Themen