2017-12-01 2 views
1

Ich habe 8 Spalten Datenrahmen und möchte eine andere mit 2 Spalten haben. Werte in diesen 2 Spalten werden aus den ursprünglichen 8 Werten berechnet.ValueError: Form der übergebenen Werte ist X, Indizes implizieren Y in Pandas anwenden und transformieren

Ist es möglich mit apply oder transform zu tun?

Beispiel:

jnd = pd.DataFrame(np.random.rand(18, 8)) 

def appl(s): 
    """particular processing is not important, only shapes matter. 
     Therefore just randomly select 2 of passed values""" 
    return np.random.choice(s, size=2) 

jnd.apply(appl, axis=1) 

Dies wirft

ValueError: Shape of passed values is (18, 2), indices imply (18, 8) 

Das Gleiche gilt für transform.

Antwort

1

Sie können die Ausgabe an Series mit Index umwandeln, die neue Spaltennamen erstellen:

def appl(s): 
    """particular processing is not important, only shapes matter. 
     Therefore just randomly select 2 of passed values""" 
    return pd.Series(np.random.choice(s, size=2), index=['a','b']) 

print(jnd.apply(appl, axis=1)) 
      a   b 
0 0.095437 0.256290 
1 0.251450 0.072835 
2 0.755617 0.630932 
3 0.667163 0.449646 
4 0.581908 0.341653 
5 0.767170 0.376034 
6 0.226523 0.120946 
7 0.537986 0.385240 
8 0.727680 0.998355 
9 0.727728 0.308487 
10 0.808792 0.286342 
11 0.481634 0.767650 
12 0.540303 0.106239 
13 0.976599 0.640354 
14 0.062515 0.062515 
15 0.892971 0.856905 
16 0.111959 0.526366 
17 0.344646 0.268620 
Verwandte Themen