创建一个新的 "object" 列

Creating a new "object" column

我想创建一个新专栏。该列应包含一天中的部分,例如 "Morning"、"Afternoon"、"Evening" 和 "Night"。我有一个名为 "DepTime" 的列,其中包含入伍时间。以此为条件:

上午 500 到 1159

下午1200到1659

晚上 1700 到 2059

晚上 2100 到 400

我想创建这样的新专栏:

Output[]: 
         DepTime    PartofDay
          1300        Noon
          2400        Night 

它会抛出错误,但我已经尝试过这种方式:

for time in flight_data["DepTime"]:
    if flight_data_explored[time].map(lambda x: 500 if x > 1 else 1159):
             flight_data_explored["PartofDay"] = "Morning"

有没有办法,做到这样的条件。帮助将不胜感激

您可以使用 numpy.where with between:

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

这是另一个解决方案:

数据:

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