gpt4 book ai didi

python - 检查混合类型列的值是否等于 0(带有 timedelta 和 float )

转载 作者:行者123 更新时间:2023-12-01 00:30:52 28 4
gpt4 key购买 nike

假设我们有以下数据框。实际情况是熔化后的柱子比较,这就是混合类型的原因。

df = pd.DataFrame({'value':[0.0, 0.0, pd.Timedelta(hours=1), pd.Timedelta(0)]})

value
0 0
1 0
2 0 days 01:00:00
3 0 days 00:00:00

我想做的是检查它是否等于0,并基于此创建一个条件列。

所以首先我们要获取一个 bool 值来标记哪些行为 0。简单地使用 eq== 是行不通的:

df['value'].eq(0)

0 True
1 True
2 False
3 False
Name: value, dtype: bool

这是因为我们可能有一个 Timedelta 类型,所以我想让我们将 timedelta 转换为秒。所以我检查了:

df['value'].apply(type) == pd._libs.tslibs.timedeltas.Timedelta

0 False
1 False
2 True
3 True
Name: value, dtype: bool

这有效。

然后用了,还是不行:

np.where(df['value'].apply(type) == pd._libs.tslibs.timedeltas.Timedelta, 
df['value'].total_seconds(),
df['value'])

'Series' object has no attribute 'total_seconds'

最后,这有效

df['value'].apply(lambda x: x.total_seconds() if type(x) == pd._libs.tslibs.timedeltas.Timedelta else x).eq(0)

0 True
1 True
2 False
3 True
Name: value, dtype: bool

但它非常慢,而且看起来不像“ Pandas ”。

所以我的问题是,是否有更快更优化的解决方案?

最佳答案

我会将 int“升级”为 timedelta

pd.to_timedelta(df.value).dt.total_seconds()==0
Out[232]:
0 True
1 True
2 False
3 True
Name: value, dtype: bool

关于python - 检查混合类型列的值是否等于 0(带有 timedelta 和 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com