2017-02-21 9 views
2

新しい列を作成したいとします。列は、たとえば「午前」、「午後」、「夕方」および「夜」のような日の一部で構成されます。私は軍の時間で構成される「DepTime」という列を持っています。条件としてこれを使用する:新しい「オブジェクト」列の作成

午前500午後1200

1159年から1659年まで

イブニング1700

2059へナイト2100は、私は私の新しい列を作成したい400

へこのように:

Output[]: 
     DepTime PartofDay 
      1300  Noon 
      2400  Night 

エラーをスローします。私はこのように試してみました。

このような状態をする方法はありますか?ヘルプは、あなたがbetweennumpy.whereを使用することができます

答えて

4

をいただければ幸いです。ここ

mask1 = df.DepTime.between(500, 1159) 
mask2 = df.DepTime.between(1200,1659) 
mask3 = df.DepTime.between(1700,2059) 

df['PartofDay1'] = np.where(mask1, 'Morning', 
        np.where(mask2, 'Afternoon', 
        np.where(mask3, 'Evening', 'Night'))) 

print (df) 
    DepTime PartofDay PartofDay1 
0  1300  Noon Afternoon 
1  2400  Night  Night 
+0

ちょっと感謝!私は "夜"のためのmask4を作成しようとしたときにエラーをスローする...私は "夜"とmask4を作成することはできませんどのように? @jezrael –

+1

次に 'mask4 = df.DepTime.between(2100,2400)|が必要です。 df.DepTime.between(0,400) '、しかしそれは必要ではありません;) – jezrael

+0

私はあなたにそれほど気にしていなければ、あなたにタグを付けた2番目の問題がありました@jezrael –

1

は別のソリューションです:

データ:

In [69]: df 
Out[69]: 
    DepTime 
0  0 
1  400 
2  500 
3  1100 
4  1200 
5  1600 
6  1700 
7  1900 
8  2100 
9  2359 

ソリューション:

bins = [0, 700, 1200, 1600, 2400] 
labels = ['Morning','Afternoon','Evening','Night'] 

df['PartofDay'] = pd.cut(df.DepTime - 500 + 2400*(df.DepTime < 500), 
         bins=bins, 
         labels=labels, 
         right=False) 

結果:それが動作

In [71]: df 
Out[71]: 
    DepTime PartofDay 
0  0  Night 
1  400  Night 
2  500 Morning 
3  1100 Morning 
4  1200 Afternoon 
5  1600 Afternoon 
6  1700 Evening 
7  1900 Evening 
8  2100  Night 
9  2359  Night 
関連する問題