我正在尝试将数据帧列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更快的方法,请告诉我。
这更多是一个教学问题。在我理想的世界中,一种方法会起作用,因为它似乎是最简洁的。
[第一个想法是通过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