我遇到了需要根据“太平洋时区”列计算当地时间的情况。
样本数据
Pacific_AM_PM timezone
8 Pacific
11 Eastern
20 Central
逻辑是
如果timezone = Pacific,则local_time:8 + 0 = 8
如果timezone = Eastern,那么local_time:11 + 3 = 14
总共只有4个条件:太平洋,东部,高山,中部
期望输出
Pacific_AM_PM timezone adjust_hour local_time
8 Pacific 0 8
11 Eastern 3 14
20 Central 2 22
我尝试使用numpy.where设置条件,但我不知道如何。我不限于使用numpy。
答案 0 :(得分:2)
df['local_time'] = df.Pacific_AM_PM + df.adjust_hour
您可以指定条件列表以及在条件中找到第一个True
时要使用的相应值。由于您的条件是互斥的,因此在conds
或choice
中顺序并不是很重要。
import numpy as np
import pandas as pd
conds = [df.timezone == 'Pacific', df.timezone == 'Eastern', df.timezone == 'Central']
choice = [df.Pacific_AM_PM, df.Pacific_AM_PM+3, df.Pacific_AM_PM+2]
df['local_time']= np.select(conds, choice)
输出:
Pacific_AM_PM timezone local_time
0 8 Pacific 8
1 11 Eastern 14
2 20 Central 22
指定将时区映射到值的字典,然后将其添加到另一列。
dct = {'Pacific': 0, 'Eastern': 3, 'Central': 2}
df['local_time'] = df.timezone.map(dct) + df.Pacific_AM_PM
输出:
Pacific_AM_PM timezone local_time
0 8 Pacific 8
1 11 Eastern 14
2 20 Central 22