我有两个数据格式: df1和df2。
df1.index
DatetimeIndex(['2001-09-06', '2002-08-04', '2000-01-22', '2000-12-19',
'2008-02-09', '2010-07-07', '2011-06-04', '2007-03-14',
'2003-05-17', '2016-02-27',..dtype='datetime64[ns]', name=u'DateTime', length=6131, freq=None)
df2.index
DatetimeIndex(['2002-01-01 01:00:00', '2002-01-01 10:00:00',
'2002-01-01 11:00:00', '2002-01-01 12:00:00',
'2002-01-01 13:00:00', '2002-01-01 14:00:00',..dtype='datetime64[ns]', length=129273, freq=None)也就是说,df1的索引是天,df2的索引是日期时间。我想在索引上执行df1和df2的内部连接,如果df2中的小时对应的日期在df1中可用,那么我们认为内部联接为真,否则为false。
我想获得两个df11和df22作为输出。df11将有来自df1的通用日期和相应的列。df22将有来自df2的通用日期小时和相应的列。
例如,df1中的“2002-08-04”和df2中的“2002-08-04:00”被认为都存在。
但是,如果df1中的'1802-08-04‘在df2中没有一个小时,那么它就不在df11中。
但是,如果df2中的‘2045-08-04-01:00:00’在df1中没有日期,则在df22中不存在。
现在,我正在使用numpy in1d和pandas normalize函数来长时间地完成这项任务。我在寻找实现这一目标的必经之路。
发布于 2016-11-29 16:04:45
假设构造了一个虚拟DF,如下所示:
idx1 = pd.date_range(start='2000/1/1', periods=100, freq='12D')
idx2 = pd.date_range(start='2000/1/1', periods=100, freq='300H')
np.random.seed([42, 314])DF只包含DateTimeIndex作为date属性:
df1 = pd.DataFrame(np.random.randint(0,10,(100,2)), idx1)
df1.head()

DF包含DateTimeIndex作为date + time属性:
df2 = pd.DataFrame(np.random.randint(0,10,(100,2)), idx2)
df2.head()

求出仅以匹配日期作为判别参数的通用指标。
intersect = pd.Index(df2.index.date).intersection(df1.index)第一个公共索引DF包含其原始数据的列:
df11 = df1.loc[intersect]
df11

第二个公共索引DF包含其原始数据的列:
df22 = df2.iloc[np.where(df2.index.date.reshape(-1,1) == intersect.values)[0]]
df22

https://stackoverflow.com/questions/40869633
复制相似问题