使用MultiIndex列将两个数据框分组

时间:2018-11-16 10:16:18

标签: python-3.x pandas dataframe

我有两个数据帧,我想创建一个新的数据帧,其中将包括两个源数据帧的所有唯一列以及公共列的聚合。

这些是两个示例:

enter image description here

enter image description here

这是结果:

enter image description here

所有列索引都应匹配以便进行汇总。

我写了以下代码:

        String messageFromQueue = new String(msg);
        objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        Object genericObject = objectMapper.readValue(messageFromQueue, new TypeReference<Object>(){});

        System.out.println("let's see object"+genericObject);
        if(genericObject instanceof CollectionObject)
            System.out.println("turned out to be collectionObject "+genericObject);

但是,我在以下行中收到错误消息:

df_all = pd.DataFrame
for dfColumn in df_1:
    if dfColumn in df_2.columns:
        df_all[dfColumn] = df_1.loc[:, dfColumn].add(df_2.loc[:, dfColumn])
    else:
        df_all[dfColumn] = df_1[dfColumn]

for dfColumn in df_2:
    if dfColumn not in df_all.columns:
        df_all[dfColumn] = df_2[dfColumn]

当我尝试将值分配给df_all [dfColumn]

它使我为Python所具有的所有不同可能性而疯狂。

但是我找不到一个可以使它工作。

感谢您的帮助和时间。

1 个答案:

答案 0 :(得分:0)

实际上

我只能通过以下方式修复它:

df_all = pd.concat([df_1, df_2], axis=1)
df_all = df_all.groupby(level=[0, 1, 2], axis=1).sum()

是否可以用level=[0, 1, 2]之类的东西来代替level=df_all.columns.levels