python - `in` 检查 pandas Series 是否包含给定值时运算符无法按预期工作

标签 python pandas datetime

我有以下包含时间戳的系列 zar:

In [743]: zar
Out[743]: 
0   2019-01-01
1   2019-03-21
2   2019-04-19
3   2019-04-22
4   2019-04-27
5   2019-05-01
6   2019-06-17
7   2019-08-09
8   2019-09-24
9   2019-12-16
Name: zar, dtype: datetime64[ns]

In [744]: zar[5]
Out[744]: Timestamp('2019-05-01 00:00:00')

In [745]: j
Out[745]: Timestamp('2019-05-01 00:00:00')

In [746]: j in zar.values
Out[746]: False

既然两者都包含时间戳,为什么结果是 False? 我想在匹配一系列时间戳时返回 True。

最佳答案

j in zar 会将 jzarindex 的每个元素进行比较。

例如,

0 in zar
# True

0 in zar.index
# True

这也与 DataFrame 的行为一致,默认情况下,in 对列进行成员资格测试。

df = pd.DataFrame(columns=['a', 'b', 'c'])
'a' in df
# True

'd' in df
# False

您需要 Series.eq(== 运算符)或 Series.isin 以及 Series.any.

(zar == j).any()
<小时/>

详情
zar == j 返回一系列 bool 值:

(zar == j)

0    False
1    False
2    False
3    False
4    False
5     True
6    False
7    False
8    False
9    False
Name: zar, dtype: bool

然后,您可以调用any,如果任何行为 True,则返回 True。如果您想要 True 值的索引,请使用 np.flatnonzero:

np.flatnonzero(zar == j)
# array([5])

关于python - `in` 检查 pandas Series 是否包含给定值时运算符无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55390374/

相关文章:

python - 如何求和引用其他数据框的总数

python - 如何使用日期时间检索行(python 和 mysql)

python - Pandas - 计算群体规模的百分比

sql - 对于两个日期之间的每一天,添加一行包含相同的信息,但仅在开始/结束列中添加当天

python - 如何替换 Python DatetimeWithNanoseconds 对象中的日期时间字段

python - 针对 Python 中的枚举成员进行验证

python - 使 matplotlib imshow 在 for 循环中阻塞 print()

python - 根据两个值之间的索引填充 Pandas 数据框

python - 如何匹配和合并两个具有完全不同值的数据帧,除了一个单词?

python - 如何选择 Pandas 中不以某些 str 开头的行?