Python 在多个系列之间切换条件
假设我有如下数据:Python 在多个系列之间切换条件,python,pandas,series,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.S
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_天
表示一个人做某事的天数,xxx_时间
表示一天内完成该工作的分钟数
我想为个人分配一个2
到category
,如果在所有工作中,他们每个工作至少花费3天20分钟。例如,人员1不符合标准,因为他们总共只花了2天,至少20分钟(他们的工作2天计数不计入总数,因为时间<20)。第二个人确实符合标准,因为他们总共花了5天时间(工作1和2)
更换后,类别
应如下所示:
[1,2,2,1]
我目前尝试这样做需要一个for循环,手动索引到每个系列中,并计算时间大于20天的总天数。然而,这种方法不能很好地扩展到我的实际数据集。我没有在这里包含代码,因为我想从熊猫的角度来处理它
在熊猫身上最有效的方法是什么?困扰我的是检查多个系列的条件,并在天数总和后采取相应措施将天数和时间放在两个数据框中,保持列位置对应关系,然后采用矢量化方法进行计算:
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
我一直收到以下错误:
无序类型:str()dtype
是float。我想知道这是否是因为存在NA
(缺少)值?有什么办法可以解释吗?看起来你的序列数据中有字符串。你可能想试试这个<代码>((days.astype(float)*(time.astype(float)>=20)).sum(1)>=3)+1,但不确定它是否解决了问题。是的,我尝试过,但仍然不起作用time.d类型
和day.d类型
都报告float64
。问题似乎来自这一部分:(day*(time>=20))
time>=20
创建了一个bool
类型的数据帧,但当我将其乘以day
时,返回的数据帧包含所有NaN
。我认为问题在于试图在比较中使用NaN
(字符串)。有没有其他方法可以在没有*
的情况下进行掩蔽?这很奇怪,因为float*bool
应该给出float
,但您可以尝试将它们转换为numpy数组<代码>((days.values*(time.values>=20)).sum(1)>=3)+1,然后查看它是否有效。或((天.值.类型(浮动)*(时间.值.类型(浮动)>=20)).sum(1)>=3)+1