2017-02-11 16 views
1

私はこのカラムをという新しい列を作成したKaggleのtitanic_dfとして使用しています。乗客が16歳以下の場合は値を、子供の場合は乗客の性別を入力してくださいしかし、ifの状態はチェックされておらず、['person']の列はその値として乗客の性別を取得します。ここで 条件がタイタニックカングルのデータセットで動作しない場合

は私がやったことだ:

あなたのループの各反復のために、あなたは関連性があるものは何でも等しくなるように 全体 'person'列を設定しているので起こり
titanic_df= pd.read_csv('train.csv') 

for age in titanic_df['Age']: 

     if age < 16 : 

      titanic_df['person']= 'child' 

     if age > 16 : 

      titanic_df['person'] = titanic_df['Sex'] 

print titanic_df[:12] 

答えて

2

。最終的な反復では、2番目の節が再生になるということが起こります。

DataFrame.applyのようなものを使用します。たとえば、あなたのケースでは、あなたが一般的に

In [1]: import pandas as pd 
    ...: 
    ...: df = pd.DataFrame() 
    ...: df['Sex'] = ['Male', 'Female', 'Male'] 
    ...: df['Age'] = [15, 20, 50] 
    ...: df 
    ...: 
Out[1]: 
     Sex Age 
0 Male 15 
1 Female 20 
2 Male 50 

In [2]: df['Person'] = df.apply(lambda x: 'Child' if x['Age'] < 16 else x['Sex'], axis=1) 

In [3]: df 
Out[3]: 
     Sex Age Person 
0 Male 15 Child 
1 Female 20 Female 
2 Male 50 Male 

ような何かを行うことができ、あなたは非常に稀にあなたのSeries/sのDataFrameて手動でループする必要が終わるん。

編集:また、それは大規模なデータフレームのために、上記のコードが大幅@ piRSquaredのソリューションで上回っている。注:

In [41]: n = 10**5 

In [42]: df = pd.DataFrame() 

In [43]: df['Sex'] = np.random.choice(['Male', 'Female'], size=n) 

In [44]: df['Age'] = np.random.randint(1, 100, size=n) 

In [46]: df.head(10) 
Out[46]: 
     Sex Age 
0 Female 15 
1 Female 91 
2 Female 50 
3 Female 11 
4 Female 59 
5 Female 40 
6 Female 50 
7 Male 28 
8 Male 13 
9 Female 27 

In [47]: %timeit np.where(df.Age.values < 16, 'Child', df.Sex.values) 
100 loops, best of 3: 3.06 ms per loop 

In [48]: %timeit df.apply(lambda x: 'Child' if x['Age'] < 16 else x['Sex'], axis=1) 
1 loop, best of 3: 5.73 s per loop 
2

私は@fugledeが行を反復ごとに列全体を割り当てるについて言っエコーう。ただし、以下の実際半大規模なデータセットにすでに巨大なパフォーマンスの向上を提供しない

df['Person'] = np.where(df.Age.values < 16, 'Child', df.Sex.values) 
print(df) 

     Sex Age Person 
0 Male 15 Child 
1 Female 20 Female 
2 Male 50 Male 
+0

numpy.where

借入の@ fugledeのサンプルデータを使用して、あなたのタスクを達成するためにベクトル化アプローチがあります。私はその例を加えました。 – fuglede

関連する問題