2017-10-03 1 views
0

Ich habe Probleme mit DataFrame.apply mit zwei Argumenten mit einem Datenrahmen, der numpy.darray enthält. Die Funktion selbst ist ziemlich einfach, und gibt einen numpy.ndarray:Form der übergebenen Werte x impliziert y mit numpy.narray Werten im Datenframe

def get_opponent_choice(choice,outcome): 
    opp_choice = np.zeros_like(choice) 
    opp_choice[outcome > 0] = choice[outcome > 0] 
    opp_choice[outcome < 0] = 1 - choice[outcome < 0] 

    return opp_choice 

get_opponent_choice(df['dir_choice'].loc[0],df['outcomes'].loc[0]) 
df.apply(lambda x : get_opponent_choice(x['dir_choice'],x['outcomes']),axis=1) 

ein einziges Testiteration Werke Rennen, aber die Funktion anwenden mit bringt mich in Schwierigkeiten mit:

Shape of passed values is (343, 54), indices imply (343, 9) 

Im Idealfall würde Ich mag Ausgabe der Daten in eine neue Spalte df ['dir_opp'] mit dem Datentyp numpy.darray, der der Form der Eingabearrays entspricht (die innerhalb der Zeilen variiert)

Bei Bedarf werden in jeder angezeigten Zeile Arrays unterschiedlicher Größe angezeigt bleibt über die Spalten hinweg gleich: DataFrame relevant columns

Toy Beispiel das Problem zu emulieren, die df.apply Funktion ausgeführt wird, die gleichen Fehler erzeugen:

toy_dict = [] 
toy_dict.append({'dir_choice' : np.array([0, 0, 0, 1, 0, 0]), 'outcomes' : np.array([1, -1, -1, 1, 1, -1])}) 
toy_dict.append({'dir_choice' : np.array([0, 0, 1, 0, 1, 0, 0]), 'outcomes' : np.array([1, -1, 1, -1, 1, 1, -1])}) 
toy_dict.append({'dir_choice' : np.array([0, 0, 1]), 'outcomes' : np.array([-1, -1, -1])}) 
toy_df = pd.DataFrame.from_dict(toy_dict) 

Antwort

0

Nach einigem Testen mit Array-Werten mit der gleichen Größe, ich fange an zu Think Array-Datentypen sind nicht die ideale Eingabe/Ausgabe für DataFrame.apply - obwohl ich gerne falsch bewiesen würde.

eine Schleife unter Verwendung eines zweiten Datenrahmen zu schaffen, zu funktionieren zu verbinden scheint:

def get_opponent_choice(choice,outcome): 
    opp_choice = np.zeros_like(choice) 
    opp_choice[outcome > 0] = choice[outcome > 0] 
    opp_choice[outcome < 0] = 1 - choice[outcome < 0] 

    return opp_choice 

join_dict = [] 
for row in df.itertuples(index=False): 
    join_dict.append({'opp_dir' : \ 
    get_opponent_choice(row[0],row[1])}) 

df.join(pd.DataFrame.from_dict(join_dict)) 
+0

Sie sind nicht die Idealtypen in einem Datenrahmen zu speichern, ist es allgemein bekannt. –

Verwandte Themen