Pandas 多个系列的条件

Pandas conditions across multiple 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 的角度而不是

来处理它

在 Pandas 中最有效的方法是什么?让我难过的是检查多个系列的条件并在天数总和后采取相应行动

daystime放在两个数据框中,保持列位置对应关系,然后用向量化的方式计算:

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