我想根据我的DataFrame - df.
中的日期和时间创建一个多索引
这实际上有效,indexed
返回正确的Multiindex(连续的日期,从02/10/2017到31/03/2018,连续的时间从08:00:00-21:55:00,以5分钟为间隔)。< / p>
问题在于我的数据集没有完整的观测值。意思是,对于随机的一天,可能会缺少08:05:00至08:40:00的观测值。我的Multiindex的长度为20496,而我的DataFrame的长度为20486。
当我想将索引与我的DataFrame
合并时,所有观察值都是NAN
。现在有人可以将多重索引与我的初始DataFrame - df
合并吗?
df = pd.read_csv(file_name, parse_dates=[0],
index_col=0, sep=',')
df['Date'] = df.index.date
df['Time'] = df.index.time
df['Time'] = df['Time'].astype(str)
df = df[df['Time'] != '22:00:00']
list_date = set(df['Date'])
list_time = set(df['Time'])
list_date = sorted(list_date)
list_time = sorted(list_time)
iterables = [list_date, list_time]
indexed = pd.MultiIndex.from_product(iterables,
names=['date', 'time'])
df_new = pd.DataFrame(df, index=indexed)
df
输出:
r2 var_v2x Date Time
TIME1
2017-10-02 08:00:00 NaN 0.00008784 2017-10-02 08:00:00
2017-10-02 08:05:00 0.00000000 0.00008784 2017-10-02 08:05:00
2017-10-02 08:10:00 0.00000008 0.00008784 2017-10-02 08:10:00
答案 0 :(得分:0)
找到了一个解决方案(可能不是一个优雅的解决方案)。
df = pd.read_csv(file_name, parse_dates=[0], index_col=0, sep=',')
df['Date'] = df.index.date
df['Time'] = df.index.time
df['Time'] = df['Time'].astype(str)
df = df[df['Time'] != '22:00:00']
list_date = set(df['Date'])
list_time = set(df['Time'])
list_date = sorted(list_date)
list_time = sorted(list_time)
iterables = [list_date, list_time]
indexed = pd.MultiIndex.from_product(iterables, names=['date', 'time'])
df_index_date = indexed.get_level_values(0)
df_index_time = indexed.get_level_values(1)
df_joined = pd.DataFrame(df_index_date.astype(str) + ' ' + df_index_time.astype(str))
df_joined = df_joined.reset_index()
df_joined = df_joined.set_index(df_joined[0])
del df_joined['index']
del df_joined[0]
df_final = df_joined.join(df)
df_final = df_final.reset_index(drop=True)
df_final = df_final.set_index(indexed)