在Pandas数据框中进行计算的多个条件

时间:2018-06-21 18:13:58

标签: python pandas numpy

我遇到了需要根据“太平洋时区”列计算当地时间的情况。

样本数据

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。

1 个答案:

答案 0 :(得分:2)

只需添加列

df['local_time'] = df.Pacific_AM_PM + df.adjust_hour

numpy.select

您可以指定条件列表以及在条件中找到第一个True时要使用的相应值。由于您的条件是互斥的,因此在condschoice中顺序并不是很重要。

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

Series.map

指定将时区映射到值的字典,然后将其添加到另一列。

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