。最終的な反復では、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
numpy.where
借入の@ fugledeのサンプルデータを使用して、あなたのタスクを達成するためにベクトル化アプローチがあります。私はその例を加えました。 – fuglede