对于一个日常分析脚本,我想递归地将多头数据框架与另一个多头数据框架合并。因此,基本上我的每个数据框在通用列中都有一列,其余列将按日期添加。
代码:
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
,但它会创建列和行的重复条目。我希望“类别”列是唯一的,并且仅在有新条目的情况下才添加值。
还有其他方法可以实现吗?
答案 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