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
代表一天花在做那件事上的分钟数
我想为一个人分配 2
到 category
,如果 在所有工作中 他们至少花了 3 天,每个工作 20 分钟。因此,例如,人 1 不符合标准,因为他们总共只花了 2 天至少 20 分钟(他们的工作 2 天计数不计入总数,因为时间 < 20)。人 2 确实符合条件,因为他们总共花了 5 天(工作 1 和 2)。
替换后,category
应如下所示:
[1, 2, 2, 1]
我目前尝试执行此操作需要一个 for 循环并手动索引到每个系列并计算时间大于 20 的总天数。但是,这种方法不能很好地扩展到我的实际数据集。我没有在此处包含代码,因为我想从 Pandas 的角度而不是
来处理它
在 Pandas 中最有效的方法是什么?让我难过的是检查多个系列的条件并在天数总和后采取相应行动
将days和time放在两个数据框中,保持列位置对应关系,然后用向量化的方式计算:
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
假设我有这样的数据:
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
代表一天花在做那件事上的分钟数
我想为一个人分配 2
到 category
,如果 在所有工作中 他们至少花了 3 天,每个工作 20 分钟。因此,例如,人 1 不符合标准,因为他们总共只花了 2 天至少 20 分钟(他们的工作 2 天计数不计入总数,因为时间 < 20)。人 2 确实符合条件,因为他们总共花了 5 天(工作 1 和 2)。
替换后,category
应如下所示:
[1, 2, 2, 1]
我目前尝试执行此操作需要一个 for 循环并手动索引到每个系列并计算时间大于 20 的总天数。但是,这种方法不能很好地扩展到我的实际数据集。我没有在此处包含代码,因为我想从 Pandas 的角度而不是
来处理它在 Pandas 中最有效的方法是什么?让我难过的是检查多个系列的条件并在天数总和后采取相应行动
将days和time放在两个数据框中,保持列位置对应关系,然后用向量化的方式计算:
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