Pandas:合并两个表时出错,错误与set_index

时间:2016-02-21 19:05:57

标签: pandas merge ipython

在此先感谢您的帮助,我的问题在这里:

我已成功将我的df加载到ipython笔记本中,然后我在其上运行了一个组:

Letter x = new Letter(phrase.charAt(i));

产生了这样一个表:

enter image description here

现在我试图将它与另一个表合并:

station_count = station.groupby('landmark').count()

enter image description here

在同一个表上也是一个简单的组,但合并会产生错误:

TypeError:无法连接非NDFrame对象

使用此代码:

dock_count_by_station = station.groupby('landmark').sum()

我认为问题是我需要在合并它们之前设置两个表的索引,但我不断为下面的代码得到这个错误:

pandas.index.IndexEngine.get_loc中的pandas / index.pyx(pandas / index.c:3979)()

pandas.index.IndexEngine.get_loc中的pandas / index.pyx(pandas / index.c:3843)()

pandas.hashtable.PyObjectHashTable.get_item中的pandas / hashtable.pyx(pandas / hashtable.c:12265)()

pandas.hashtable.PyObjectHashTable.get_item中的pandas / hashtable.pyx(pandas / hashtable.c:12216)()

KeyError:' landmark'

station_count.set_index('界标&#39)

1 个答案:

答案 0 :(得分:1)

使用join

您可以使用join,它将索引上的表合并。您可能还希望指定加入类型(例如'外部','内部','左'或'右')。您有重叠的列名称(例如station_id),因此您需要指定后缀。

>>> dock_count_by_station.join(station_count, rsuffix='_rhs')
               dockcount          lat         long  station_id  dockcount_rhs  installation  lat_rhs  long_rhs  name  station_id_rhs
landmark                                                                                                                            
Mountain View        117   261.767433  -854.623012         210              7             7        7         7     7               7
Palo Alto             75   187.191873  -610.767939         180              5             5        5         5     5               5
Redwood City         115   262.406232  -855.602755         224              7             7        7         7     7               7
San Francisco        665  1322.569239 -4284.054814        2126             35            35       35        35    35              35
San Jose             249   560.039892 -1828.370075         200             15            15       15        15    15              15

使用merge

请注意,执行landmark时默认设置了groupby索引。如果您不希望这种情况发生,您可以随时使用as_index=False,但之后您必须使用merge代替join

dock_count_by_station = station.groupby('landmark', as_index=False).sum()
station_count = station.groupby('landmark', as_index=False).count()

>>> dock_count_by_station.merge(station_count, on='landmark', suffixes=['_lhs', '_rhs'])
        landmark  dockcount_lhs      lat_lhs     long_lhs  station_id_lhs  dockcount_rhs  installation  lat_rhs  long_rhs  name  station_id_rhs
0  Mountain View            117   261.767433  -854.623012             210              7             7        7         7     7               7
1      Palo Alto             75   187.191873  -610.767939             180              5             5        5         5     5               5
2   Redwood City            115   262.406232  -855.602755             224              7             7        7         7     7               7
3  San Francisco            665  1322.569239 -4284.054814            2126             35            35       35        35    35              35
4       San Jose            249   560.039892 -1828.370075             200             15            15       15        15    15              15