跨越多个系列的熊猫条件

时间:2017-03-03 04:08:55

标签: python pandas series

假设我有一些这样的数据:

category = pd.Series(np.ones(4))

job1_days = pd.Series([1, 2, 1, 2])
job1_time = pd.Series([30, 35, 50, 10])

job2_days = pd.Series([1, 3, 1, 3])
job2_time = pd.Series([10, 40, 60, 10])

job3_days = pd.Series([1, 2, 1, 3])
job3_time = pd.Series([30, 15, 50, 15])

每个条目代表一个人(总共4人)。 xxx_days表示个人执行某项操作的天数,xxx_time表示在一天内完成该工作所花费的分钟数

我想为个人分配2category,如果跨所有工作,他们每人花费至少3天,每次20分钟。因此,例如,人1不符合标准,因为他们仅花费总共2天并且至少20分钟(他们的工作2天计数不计入总数,因为时间<20)。第2人确实符合标准,因为他们共花了5天(工作1和2)。

替换后,category应如下所示: [1, 2, 2, 1]

我目前尝试这样做需要一个for循环并手动索引到每个系列并计算时间大于20的总天数。但是,这种方法并不能很好地扩展到我的实际数据集。我还没有把代码包含在这里,因为我想从Pandas的角度来看待它

在熊猫中最有效的方法是什么?困扰我的是检查多个系列中的条件并在总计天数之后采取相应行动

1 个答案:

答案 0 :(得分:1)

时间放在保持列位置对应关系的两个数据框中,然后以矢量化方法进行计算:

import pandas as pd

time = pd.concat([job1_time, job2_time, job3_time], axis = 1)   ​
days = pd.concat([job1_days, job2_days, job3_days], axis = 1)

((days * (time >= 20)).sum(1) >= 3) + 1

#0    1
#1    2
#2    2
#3    1
#dtype: int64