如何获取特定行号的日期时间索引值
Posted
技术标签:
【中文标题】如何获取特定行号的日期时间索引值【英文标题】:How to obtain the datetime index value at a specific row number 【发布时间】:2021-03-06 19:13:52 【问题描述】:我正在使用如下所示的数据框:
time value
2020-08-02 21:00:00+00:00 4
2020-08-02 21:01:00+00:00 2
2020-08-02 21:02:00+00:00 3
2020-08-02 21:03:00+00:00 2
2020-08-02 21:04:00+00:00 2
2020-08-02 21:05:00+00:00 3
2020-08-02 21:06:00+00:00 3
2020-08-02 21:07:00+00:00 3
2020-08-02 21:08:00+00:00 4
2020-08-02 21:09:00+00:00 4
2020-08-02 21:10:00+00:00 5
我想在第 9 行获取日期时间索引值(即在日期时间“2020-08-02 21:08:00+00:00
”)
当我使用时:
print('Datetime at position 9 is %s' % df[df['value']==df.iat[9,0]].index[0])
我最终得到:
Datetime at row 9 is 2020-08-02 21:00:00+00:00
但我期望:
Datetime at row 9 is 2020-08-02 21:08:00+00:00
我相信这是因为值“4”出现在我的 df 中较早,但这不是我正在寻找的日期时间值。我确信有一个快速解决方案,但由于某种原因,我无法理解它。
(搜索了以前的问题,这些问题看起来都非常相似,但并没有完全解决这个用例。)
【问题讨论】:
【参考方案1】:保持简单:)
print('Datetime at position 9 is %s' % df.iat[9,0])
如果可能,最好动态获取列名:
df.iat[9, df.columns.get_loc("time")]
为什么您的解决方案失败了:
df[df['value']==df.iat[9,0]].index[0]
让我们分解一下:
df[...].index[0]
将采用 df[...]
返回的任何内容,获取索引,并返回该索引的第 0 个元素。
df['value']==df.iat[9,0]
将为您提供等于位置9,0
的所有值的df。您现在拥有以下 df:
time value
2020-08-02 21:00:00+00:00 4
2020-08-02 21:08:00+00:00 4
2020-08-02 21:09:00+00:00 4
数据帧的索引设置为时间,因此.index
为我们提供了时间:
time
2020-08-02 21:00:00+00:00
2020-08-02 21:08:00+00:00
2020-08-02 21:09:00+00:00
现在我们得到第 0 个元素:2020-08-02 21:00:00+00:00
【讨论】:
感谢您的快速回复。出于某种原因,使用“df.iat[9,0]”给了我该位置的实际值(即“4”),但我在日期时间索引值之后【参考方案2】:print('Datetime at position 9 is %s' % df.index[9])
感谢 Noah - 感谢您的详细解释 - 这让我思考
【讨论】:
以上是关于如何获取特定行号的日期时间索引值的主要内容,如果未能解决你的问题,请参考以下文章