早上好。你知道吗
我的问题是:我有一个pandas数据框,它有一个名为'fecha'的列,用于存储日期对象,还有一个元组列表,用于存储初始日期时间和最终日期时间。举例如下:
df =
fecha
0 2018-10-01
1 2019-01-12
2 2018-12-25
list_ranges = [(datetime.datetime(2018, 10, 1, 0, 0),
datetime.datetime(2018, 10, 15, 0, 0)),
(datetime.datetime(2018, 10, 16, 0, 0),
datetime.datetime(2018, 10, 31, 0, 0)),
(datetime.datetime(2018, 11, 1, 0, 0), datetime.datetime(2018, 11, 15, 0, 0)),
(datetime.datetime(2018, 11, 16, 0, 0),
datetime.datetime(2018, 11, 30, 0, 0)),
(datetime.datetime(2018, 12, 1, 0, 0), datetime.datetime(2018, 12, 15, 0, 0)),
(datetime.datetime(2018, 12, 16, 0, 0),
datetime.datetime(2018, 12, 31, 0, 0)),
(datetime.datetime(2019, 1, 1, 0, 0), datetime.datetime(2019, 1, 15, 0, 0))]
我想得到列表中每个日期所在范围的位置。我想要的结果是:
df =
result
0 1
1 7
2 6
目前,我正在做:
df.fecha = df.fecha.apply(lambda x: select_quincena(x, quincenas))
def select_quincena(fecha, quincenas):
fecha = datetime.datetime.combine(fecha, datetime.datetime.min.time())
num = 0
for e in quincenas:
num += 1
if fecha >= e[0] and fecha <= e[1]:
return num
它的工作很好,但我很肯定,有一个更好,更容易做到这一点。你知道吗
事先非常感谢。你知道吗
使用^{} ,而不是
datetime
模块首先将您的系列转换为熊猫
datetime
:使用^{} 来分类
这是一个装箱问题。您可以使用
pd.cut
作为矢量化解决方案:相关:Filtering and creating a column based on the date column
整数标签使用^{}
在这种情况下,还可以使用二进制搜索来查找所需的插入点。这在
np.searchsorted
中得到了有效的实现。你知道吗处理
Cannot cast array data
错误以上测试适用于熊猫0.23.4/NumPy 1.15.1。对于其他版本,类型比较可能不一致。在这种情况下,可以将
datetime
数组转换为整数,方法是将.values
的每次提取替换为.values.astype('datetime64[D]').astype(int)
。你知道吗相关:Cannot cast array data from dtype('M8-ns') to dtype('float64') according to the rule 'safe'。你知道吗
相关问题 更多 >
编程相关推荐