基于我之前的问题
Join two dataframe and expand the dataframe with assign the ID
我有两个像这样的数据框:
df1
ID Time
ID_E 9:07:00
ID_E 9:15:00
ID_B 9:09:00
ID_B 9:14:00
df2
Time X Y
9:07:00 767597 9427273
9:08:00 767597 9427284
9:09:00 767608 9427284
9:10:00 767608 9427295
9:11:00 767619 9427306
9:12:00 767623 9427311
9:13:00 767628 9427319
9:14:00 767634 9427327
9:15:00 767640 9427335
我想将一个数据帧插入另一个具有ID为“ Time”的时间键的数据帧。但是,结果出现错误right keys must be sorted
,这是因为df1
中的时间未排序。如何解决这种情况?
我使用了以下代码:
df1 = pd.read_csv(data1.csv)
df1.columns = df1.columns.str.strip()
df2 = pd.read_csv(data2.csv)
df2.columns = df2.columns.str.strip()
df1['Time'] = pd.to_datetime(df1['Time'])
df2['Time'] = pd.to_datetime(df2['Time'])
df = pd.merge_asof(df2, df1, on='Time').assign(Time = lambda x: x['Time'].dt.strftime('%H:%M'))
df
我的预期结果:
ID Time X Y
ID_E 9:07:00 767597 9427273
ID_E 9:08:00 767597 9427284
ID_E 9:09:00 767608 9427284
ID_E 9:10:00 767608 9427295
ID_E 9:11:00 767619 9427306
ID_E 9:12:00 767623 9427311
ID_E 9:13:00 767628 9427319
ID_E 9:14:00 767634 9427327
ID_E 9:15:00 767640 9427335
ID_B 9:09:00 767608 9427284
ID_B 9:10:00 767608 9427295
ID_B 9:11:00 767619 9427306
ID_B 9:12:00 767623 9427311
ID_B 9:13:00 767628 9427319
ID_B 9:14:00 767634 9427327
谢谢你对我的帮助。
答案 0 :(得分:1)
您得到:
右键必须排序
这是右键列表df1.Time
,因此有必要在merge_asof
之前按此列排序:
df1 = df1.sort_values('Time')
如果错误也需要按df2.Time
进行排序:
左键必须排序
df2 = df2.sort_values('Time')
一起:
df1 = pd.read_csv(data1.csv)
df1.columns = df1.columns.str.strip()
df2 = pd.read_csv(data2.csv)
df2.columns = df2.columns.str.strip()
df1['Time'] = pd.to_datetime(df1['Time'])
df2['Time'] = pd.to_datetime(df2['Time'])
df1 = df1.sort_values('Time')
df = pd.merge_asof(df2, df1, on='Time').assign(Time = lambda x: x['Time'].dt.strftime('%H:%M'))