当键是复合且唯一时,Pandas 合并抱怨非唯一标签

问题描述 投票:0回答:2

我正在尝试合并两个数据帧,这样我最终会得到一个具有相同列数但行数增加的数据帧。

import pandas as pd, numpy as np

data1 = [['date'  ,    'symbol', 'value'],
         ['1999-01-10', 'AAA',      101],
         ['1999-01-11', 'AAA',      201]]
I am trying to merge two dataframes such that i end up with one with same number of columns but row count should increase


import pandas as pd, numpy as np

data1 = [['date'  ,    'symbol', 'value'],
         ['1999-01-10', 'AAA',      101],
         ['1999-01-11', 'AAA',      201]]

data2 = [['date'  ,    'symbol', 'value'],
         ['1999-01-10', 'BBB',      101],
         ['1999-01-11', 'BBB',      201]]


df1 = pd.DataFrame(data1[1:], columns=data1[:1])
df2 = pd.DataFrame(data2[1:], columns=data2[:1])
df = df1.merge(df2, on = ['date', 'symbol'], how='outer')

上面的代码在合并行上产生错误:

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

我知道在上述情况下我可以使用 pd.CONCAT 实现我所寻求的目标,但我想了解为什么合并在这里失败,因为日期+符号的组合键不同/唯一? 此外我不明白有关多索引的部分。除了这些数据帧上的“自然”索引之外,没有任何索引。

python pandas
2个回答
0
投票

问题是如何创建

df1
/
df2
:

df1 = pd.DataFrame(data1[1:], columns=data1[0])  # <-- columns should be list, not list of lists
df2 = pd.DataFrame(data2[1:], columns=data2[0])  # <-- detto

然后:

df = df1.merge(df2, on=["date", "symbol"], how="outer")
print(df)

打印:

         date symbol  value_x  value_y
0  1999-01-10    AAA    101.0      NaN
1  1999-01-10    BBB      NaN    101.0
2  1999-01-11    AAA    201.0      NaN
3  1999-01-11    BBB      NaN    201.0

0
投票

此错误是由于您创建输入的方式造成的。通过使用

[:1]
进行切片,您可以创建一个 MultiIndex。

您应该使用:

df1 = pd.DataFrame(data1[1:], columns=data1[0])
df2 = pd.DataFrame(data2[1:], columns=data2[0])
© www.soinside.com 2019 - 2024. All rights reserved.