Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在多个系列之间切换条件_Python_Pandas_Series - Fatal编程技术网

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