【问题标题】:Creating a new "object" column创建一个新的“对象”列
【发布时间】:2017-07-10 16:14:03
【问题描述】:

我想创建一个新列。该列应由一天中的部分组成,例如“早上”、“下午”、“晚上”和“晚上”。我有一个名为“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"

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

【问题讨论】:

    标签: python pandas lambda conditional


    【解决方案1】:

    您可以将numpy.wherebetween 一起使用:

    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
    

    【讨论】:

    • 嘿,谢谢它有效!但是当我尝试为“Night”创建一个 mask4 时,它会抛出一个错误......为什么我不能用“Night”创建 mask4? @jezrael
    • 那么需要mask4 = df.DepTime.between(2100,2400) | df.DepTime.between(0,400),但不是必须的;)
    • 我在第二个问题中标记了你,如果你不介意看看@jezrael
    【解决方案2】:

    这是另一个解决方案:

    数据:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多