熊猫合并为多头数据框

时间:2020-06-14 13:19:21

标签: python-3.x pandas dataframe merge

对于一个日常分析脚本,我想递归地将多头数据框架与另一个多头数据框架合并。因此,基本上我的每个数据框在通用列中都有一列,其余列将按日期添加。

代码:

import pandas as pd

L = [('Category','Fruits','colors'),(d,'A','C')]
cols = [(new, c) for new, start, end in L for c in df1.loc[:, start:end].columns]
df1.columns = pd.MultiIndex.from_tuples(cols)
df3 = pd.DataFrame(df1.values.tolist(), columns= pd.MultiIndex.from_tuples(cols))
df1


M = [('Category','Fruits','colors'),('20200605','A','C')]
cols = [(new, c) for new, start, end in M for c in df2.loc[:, start:end].columns]
df2.columns = pd.MultiIndex.from_tuples(cols)
df4 = pd.DataFrame(df2.values.tolist(), columns= pd.MultiIndex.from_tuples(cols))

####Dataframe merge
df5=pd.merge(df3,df4,on=['Category','Fruits','colors'],how='outer')

(d为日期,每天更改) 给我以下错误:

    ValueError: The column label 'Category' is not unique.
    For a multi-index, the label must be a tuple with elements corresponding to each level.

同样,另一个数据帧需要进一步合并。

使用多标头无法进行数据帧合并,是否需要删除堆栈级别?我也尝试过pd.concat,但它会创建列和行的重复条目。我希望“类别”列是唯一的,并且仅在有新条目的情况下才添加值。

还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:0)

好像您有多个索引列。您可以删除列索引的级别并像这样合并数据框

df3.columns = df3.columns.droplevel()
df4.columns = df4.columns.droplevel()

df3

Fruits  colors  A   B   C
0   Orange  Orange  a   4   7
1   Banana  yellow  b   5   8
2   Apple   red c   4   9
3   Grapes  green   d   5   4

df3.merge(df4, on=['Fruits', 'colors'])

    Fruits  colors  A_x B_x C_x A_y B_y C_y
0   Orange  Orange  a   4   7   a   4   7
1   Banana  yellow  b   5   8   b   5   8
2   Apple   red c   4   9   c   4   9
3   Grapes  green   d   5   4   d   5   4