我正在try 合并两个收件箱,以便最终得到一个列数相同但行计数增加的收件箱.

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实现我想要的目标,但我想理解为什么合并在这里失败,因为日期+符号的复合键是不同的/唯一的? 而且我不明白关于多索引的部分. 除了这些 pyramid 上的"自然"指数之外,没有任何指数.

推荐答案

问题在于如何创建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

Python相关问答推荐

使用Python OpenCV的文本检测分割

Python中使用Delivercio进行多个请求

Python主进程和分支进程如何共享gc信息?

更改Seaborn条形图中的x轴日期时间限制

遵循轮廓中对象方向的计算线

如何计算列表列行之间的公共元素

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

Python上的Instagram API:缺少client_id参数"

使用索引列表列表对列进行切片并获取行方向的向量长度

加速Python循环

我对我应该做什么以及我如何做感到困惑'

形状弃用警告与组合多边形和多边形如何解决

给定高度约束的旋转角解析求解

删除marplotlib条形图上的底边

旋转多边形而不改变内部空间关系

处理具有多个独立头的CSV文件

如果包含特定值,则筛选Groupby

如何在Python Pandas中填充外部连接后的列中填充DDL值

使用类型提示进行类型转换

Python Mercury离线安装