仅在两次之间设置熊猫系列等于特定值

问题描述 投票:1回答:1

我正在尝试将数据帧列long的值设置为等于0,即介于开始时间和结束时间之间。有人能让我理解为什么前两种方法不起作用,而后一种方法为什么吗?

start_time, end_time = '9:30', '9:40'

data.between_time(start_time, end_time)['long'] = 0    (will not work)
data.loc[data.between_time(start_time, end_time).index]['long'] = 0 (will not work)

data['long'].loc[data.between_time(start_time, end_time).index] = 0 (will work)

此外,如果有比上述方法3更快的方法,请告诉我。

这更多是一个教学问题。在我理想的世界中,一种方法会起作用,因为它似乎是最简洁的。

python-3.x pandas
1个回答
1
投票

[第一个想法是通过DatetimeIndex.indexer_between_time获取位置,并通过DatetimeIndex.indexer_between_time设置值,所以在DataFrame.iloc列的必要位置也需要DataFrame.iloc

long

类似于您的解决方案是使用Index.get_loc

Index.get_loc

对于具有示例数据的1M行,性能相似,但应避免使用您的解决方案,因为可能会出现idx = data.index.indexer_between_time(start_time, end_time) data.iloc[idx, data.columns.get_loc('long')] = 0

DataFrame.loc
© www.soinside.com 2019 - 2024. All rights reserved.