我需要合并一组数据框:
df1 = pd.DataFrame({'Lic1': [0,5,7]}, index=['07:00', '08:00', '09:00'])
df2 = pd.DataFrame({'Lic1': [4,2,1]}, index=['10:00', '11:00', '12:00'])
df3 = pd.DataFrame({'Lic2': [1,1,4]}, index=['07:00', '08:00', '10:00'])
获得以下结果:
Lic1 Lic2
07:00 0.0 1.0
08:00 5.0 1.0
09:00 7.0 NaN
10:00 4.0 4.0
11:00 2.0 NaN
12:00 1.0 NaN
当我使用concat时,我得到了正确的列,但是索引重复(由于新的列名,索引为07:00、08:00和10:00):
df = pd.concat([df1, df2, df3], sort=True, axis=0)
Output:
Lic1 Lic2
07:00 0.0 NaN
08:00 5.0 NaN
09:00 7.0 NaN
10:00 4.0 NaN
11:00 2.0 NaN
12:00 1.0 NaN
07:00 NaN 1.0
08:00 NaN 1.0
10:00 NaN 4.0
然后我必须合并重复的索引以存储最大值并删除重复的行,如下所示:
for index in df.index:
for column in df.columns:
df.loc[index,column] = df.loc[index, column].max()
df.drop_duplicates(inplace=True)
这给了我请求的输出。
有没有一种更简单(==更泛泛)的方法,如何一步一步完成?我尝试通过 concat , merge 或 join 一步完成此操作,但是可能错过了一些东西。我总是在索引中出现重复性(如上)或重复的列(例如带有 concat 的双Lic1或带有 merge 的Lic1_x和Lic1_y)。
答案 0 :(得分:1)
每个索引使用max
,类似于.groupby(level=0).max()
:
df = pd.concat([df1, df2, df3], sort=True, axis=0).max(level=0)
print (df)
Lic1 Lic2
07:00 0.0 1.0
08:00 5.0 1.0
09:00 7.0 NaN
10:00 4.0 4.0
11:00 2.0 NaN
12:00 1.0 NaN