2017-10-03 9 views
0

numpy.ndarrayを含むデータフレームを持つ2つの引数を持つDataFrame.applyを使用して問題が発生しています。機能自体はかなり簡単で、numpy.ndarray出力:渡された値の形状xは、データフレーム内のnumpy.ndarrayの値とyを暗示します

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) 

は、単一のテストの反復作業を実行し、しかし、適用する機能を使用すると、とのトラブルに私を取得します。私が好きな

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

入力配列の形状に一致するnumpy.ndarrayデータ型を含む新しい列df ['dir_opp']にデータを出力する(行に応じて変化する)

表示されている各行には異なるサイズの配列がありますが列全体で同じままです。 DataFrame relevant columns

玩具例df.apply機能は、同じエラーが発生します実行し、問題をエミュレートする:

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) 

答えて

0

同じサイズの配列の値を持つテストのビットの後、私はし始めています配列データ型はDataFrame.applyの理想的な入出力ではないと私は間違っていることを証明したいと思いますが。参加するために、第2のデータフレームを作成するために、ループを使用し

が正常に動作するようです:

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

彼らは、データフレームに格納するための理想的なタイプではありません、それは常識です。 –

関連する問題