我正在尝试合并两个数据帧,这样我最终会得到一个具有相同列数但行数增加的数据帧。
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 实现我所寻求的目标,但我想了解为什么合并在这里失败,因为日期+符号的组合键不同/唯一? 此外我不明白有关多索引的部分。除了这些数据帧上的“自然”索引之外,没有任何索引。
问题是如何创建
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
此错误是由于您创建输入的方式造成的。通过使用
[:1]
进行切片,您可以创建一个 MultiIndex。
您应该使用:
df1 = pd.DataFrame(data1[1:], columns=data1[0])
df2 = pd.DataFrame(data2[1:], columns=data2[0])