我正在尝试从其他时间范围 Dataframe Map时间类别。下面是时间范围 Dataframe 。“开始”和“结束”之间的时间被分类为每个“周”。
Start End Weeks
0 2019-08-30 2019-10-03 1
1 2019-10-04 2019-10-31 2
2 2019-11-01 2019-11-28 3
字符串
这是我的时间数据框。
Date
0 2019-09-06
1 2019-10-13
2 2019-10-12
3 2019-11-04
下面是我想要的输出。您可以看到,每个日期都根据TimeRange Dataframe被分类到相应的“Weeks”中。
Date Weeks
0 2019-09-06 1
1 2019-10-13 2
2 2019-10-12 2
3 2019-11-04 3
我的代码如下。
import pandas as pd
# Date Range dataframe
Date_Range = {'Start':[datetime.datetime(2019, 8, 30, 0, 0),datetime.datetime(2019, 10, 4, 0, 0),datetime.datetime(2019, 11, 1, 0, 0)],
'End':[datetime.datetime(2019, 10, 3, 0, 0),datetime.datetime(2019, 10, 31, 0, 0),datetime.datetime(2019, 11, 28, 0, 0)],
'Weeks':[1,2,3],}
Date_Range_DF = pd.DataFrame(Date_Range)
print(Date_Range_DF)
# My dataframe
Date = {'Date':[datetime.datetime(2019, 9, 6, 0, 0),datetime.datetime(2019, 10, 13, 0, 0),datetime.datetime(2019, 10, 12, 0, 0),datetime.datetime(2019, 11, 4, 0, 0)]}
Date_DF = pd.DataFrame(Date)
print(Date_DF)
# Merge Dataframe
import numpy as np
import pandas as pd
df1 = Date_Range
df2 = Date_Range_DF
df2.start, df2.End = pd.to_datetime(df2.Start), pd.to_datetime(df2.End)
filtered = pd.merge_asof(df1, df2, left_on='Date', right_on='Start')
但是,它一直显示错误TypeError: Can only merge Series or DataFrame objects, a <class 'dict'> was passed
请帮我找窃听器。谢谢。
1条答案
按热度按时间p3rjfoxz1#
第一步
制作边界列表(
bins
)bins
第二步
按
pd.cut
划分类别(使用bins
的边界)s
第三步
将
s
转换为Weeks
列Date_DF
如果不希望
Week
dtype是category,请使用以下代码,例如makeint
其他方式
您可以获得结果
merge_asof
,但对于晚于“2019-11-28”的日期,需要进行额外处理