熊猫合并索引不起作用

Posted

技术标签:

【中文标题】熊猫合并索引不起作用【英文标题】:pandas merge on index not working 【发布时间】:2015-02-01 14:34:11 【问题描述】:

我有两个由 groupby 操作生成的数据帧(实际上是系列):

bw

l1
Consumer Discretionary         0.118718
Consumer Staples               0.089850
Energy                         0.109988
Financials                     0.159418
Health Care                    0.115060
Industrials                    0.109078
Information Technology         0.200392
Materials                      0.035509
Telecommunications Services    0.030796
Utilities                      0.031190
dtype: float64

pw

l1
Consumer Discretionary         0.148655
Consumer Staples               0.067873
Energy                         0.063899
Financials                     0.095689
Health Care                    0.116015
Industrials                    0.181346
Information Technology         0.117715
Materials                      0.043155
Telecommunications Services    0.009550
Utilities                      0.156103
dtype: float64

当我尝试和merge他们使用时

pd.merge(bw,pw,left_index=True,right_index=True)

我收到一个错误

Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/IPython/core/interactiveshell.py", line 2883, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-174-739bb362e06d>", line 1, in <module>
    pd.merge(pw,attr,left_index=True,right_index=True)
  File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 39, in merge
    return op.get_result()
  File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 185, in get_result
    join_index, left_indexer, right_indexer = self._get_join_info()
  File "/usr/lib/python2.7/dist-packages/pandas/tools/merge.py", line 251, in _get_join_info
    left_ax = self.left._data.axes[self.axis]
IndexError: list index out of range

但是当我这样做时

bw = bw.reset_index()
pw = pw.reset_index()
mrg = pd.merge(pw,bw,on="l1")

它有效。但是,它使我的代码在多次连接迭代中的可读性大大降低,因此我想知道我做错了什么以及如何使代码merging on indexes 的第一个版本工作。

谢谢

【问题讨论】:

这很有趣,我觉得很好。你用的是什么版本的熊猫?另外,您可以尝试 dataframe.join()... bw.join(pw) 嗨@BobHaffner 它是ubuntu 存储库中的熊猫,我认为它是0.14.1。 bw.join(pw) 给出错误AttributeError: 'Series' object has no attribute 'join' 这就是为什么我要走合并的道路... 好的,开枪。我忘记了 join 只是 df 的事情 【参考方案1】:

将series改成DataFrame就可以合并了

merged = pd.merge(pd.DataFrame(bw),pd.DataFrame(pw),left_index=True,right_index=True)
print(merged)

结果:

                                 0_x       0_y
l1                                             
Consumer Discretionary       0.118718  0.118718
Consumer Staples             0.089850  0.089850
Energy                       0.109988  0.109988
Financials                   0.159418  0.159418
Health Care                  0.115060  0.115060
Industrials                  0.109078  0.109078
Information Technology       0.200392  0.200392
Materials                    0.035509  0.222509
Telecommunications Services  0.030796  0.030796
Utilities                    0.031190  0.031190

或者如果要以并行方式执行合并(bw 和 pw 具有相同的索引,相同的项目数)。

c = zip(bw.tolist(),pw.tolist())
merged = pd.DataFrame(c, index=bw.index)

应该有同样的结果。

当你reset_index() 一个系列时,它会变成一个DataFrame(索引到列)。这就是为什么你可以在那之后合并。

【讨论】:

以上是关于熊猫合并索引不起作用的主要内容,如果未能解决你的问题,请参考以下文章

具有索引合并(多个属性)+ orderby 的 Firebase 不起作用

具有索引合并 + orderby 的 Firebase 不起作用

熊猫 concat ignore_index 不起作用

熊猫日期时间切片:junkdf.ix['2015-08-03':'2015-08-06'] 不起作用

带有熊猫的日期正则表达式过滤器不起作用

univariate_data 函数在 python tensorflow 教程(熊猫数据框)中不起作用