我想创建一个基于特定条件标记行的函数。你知道吗
它不起作用,我认为这是由列的格式造成的。你知道吗
功能是:
tolerance=5
def pmm_m2_rag(data):
if data['m2'] == data['TP_M2'] and data['m6p'] + pd.to_timedelta(tolerance,unit='D') <= data['latedate']:
return 'GREEN'
elif data['m2']!= data['TP_M2'] and data['m6p'] + pd.to_timedelta(tolerance,unit='D') < data['latedate']:
return 'AMBER'
elif data['m2']!= None and data['m6p'] + pd.to_timedelta(tolerance,unit='D') > data['latedate']:
return 'RED'
数据帧是:
m2 TP_M2 m6p latedate
0 2019-11-28 2019-10-29 2020-02-21 2020-02-25
1 2019-11-28 2019-10-29 2020-02-21 2020-02-25
2 2019-11-28 2019-11-28 2020-02-09 2020-02-17
3 2019-11-28 2019-11-28 2020-02-29 2020-02-17
数据类型为:
m2 object
TP_M2 object
m6p object
latedate object
dtype: object
预期产量:
m2 TP_M2 m6p latedate RAG
0 2019-11-28 2019-10-29 2020-02-21 2020-02-25 AMBER
1 2019-11-28 2019-10-29 2020-02-21 2020-02-25 AMBER
2 2019-11-28 2019-11-28 2020-02-09 2020-02-17 GREEN
3 2019-11-28 2019-11-28 2020-02-29 2020-02-17 RED
首先,代码中的某些内容似乎有问题。这个
比较链肯定是错误的。你知道吗
那么在你的条件下,你的两个从句是相同的。这也毫无意义。你知道吗
除此之外,您应该将列的数据类型转换为
datetime
类型。例如:这取决于从数据库读取数据时的数据类型。你知道吗
之后,基本上有两种选择。您可以编写一个函数,获取一行,计算值并返回颜色。然后逐行应用此函数。你知道吗
另一个(更快更可取的)选项是并行计算列“RAG”。你知道吗
这可以通过使用
numpy.where
和上面所写的条件来实现。 请注意,datafram列之间的and
必须写成&
;or
写成|
。你知道吗这样的方法应该有用:
np.where
的语法是一个选项是在进行
datetime
比较之前将object
转换成datetime
相关问题 更多 >
编程相关推荐