我有以下包含时间戳的系列 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
会将 j
与 zar
的 index 的每个元素进行比较。
例如,
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/