熊猫:concat数据框

时间:2019-09-23 11:36:52

标签: pandas concatenation

我需要合并一组数据框:

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)。

1 个答案:

答案 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