【发布时间】:2020-06-14 13:19:21
【问题描述】:
对于一个日常分析脚本,我想以递归方式将多头数据帧与另一个多头数据帧合并。所以基本上我的每个数据框都会有一个公共列,其余列将按日期添加。
代码:
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,但它会创建列和行的重复条目。我希望“类别”列是唯一的,并且仅在新条目的情况下添加值。
还有其他方法可以实现吗?
【问题讨论】:
-
不需要移除栈层;你可以使用多索引(pandas.pydata.org/pandas-docs/stable/reference/api/…),然后你只需要一个'join'。
-
最后说明 - 不要在您的问题中放置代码或数据的图像。发布数据,或者更好的是,发布用于创建示例的代码。这个问题应该可以帮助您了解如何。 stackoverflow.com/questions/20109391/…祝你好运!
-
您好,谢谢您的回答。我不能删除列,因为如果在新数据框中找到,我也想添加新类别。基本上原始数据框会附加日常数据。因此 df 中的任何新条目都应包含在原始数据中
-
好的,注意了,谢谢,下次我会注意的
-
你能发布一个示例数据吗?同时你可以试试
df3=pd.merge(df1,df2,on=['Category', 'Fruits'],how='outer']
标签: python-3.x pandas dataframe merge