130、pandas操作——索引上的数据集合并
2018-01-23 本文已影响0人
陈容喜
DataFrame中的连接键位于其索引中,可以传入left_index=True或right_index=True(或两个都传入)来说明索引应该被用作连接键:
1.png
默认的merge方法是求连接键的交集,可以通过外连接的方式得到并集:
2.png
层次化索引:
3.png
以列表的形式指明用作合并键的多个列:
4.png
合并索引:
5.png
DataFrame还有一个join实例方法,它能更方便实现按索引合并:
6.png
使用join支持参数DataFrame的索引跟调用者DataFrame的某个列之间的连接:
7.png
向join传入一组DataFrame实现简单的索引合并:
8.png
源码:
# coding: utf-8
# In[1]:
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
# In[2]:
# 索引被用作连接键
left1 =DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)})
print (left1)
# In[3]:
right1 = DataFrame({'group_val':[3.5,7]},index=['a','b'])
print(right1)
# In[4]:
pd.merge(left1,right1,left_on='key',right_index=True)
# In[5]:
# 通过外连接方式求并集
pd.merge(left1,right1,left_on='key',right_index=True,how='outer')
# In[6]:
# 层次化索引
lefth = DataFrame({'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'key2':[2000,2001,2002,2001,2002],
'data':np.arange(5)})
print(lefth)
# In[7]:
righth = DataFrame(np.arange(12).reshape((6,2)),
index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],
[2001,2000,2000,2000,2001,2002]],
columns=['event1','event2'])
print(righth)
# In[8]:
# 以列表的形式指明用作合并键的多个列
pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True)
# In[9]:
pd.merge(lefth,righth,left_on=['key1','key2'],right_index=True,how='outer')
# In[10]:
# 合并索引
left2 = DataFrame([[1,2],[3,4],[5,6]],index=['a','c','e'],columns=['Ohio','Nevada'])
print(left2)
# In[11]:
right2 = DataFrame([[7,8],[9,10],[11,12],[13,14]],
index=['b','c','d','e'],columns=['Missour','Alabama'])
print(right2)
# In[12]:
pd.merge(left2,right2,how='outer',left_index=True,right_index=True)
# In[13]:
# 使用join实例方法按索引合并
left2.join(right2,how='outer')
# In[14]:
# join支持参数DataFrame的索引跟调用者DataFrame的某个列之间的连接
left1.join(right1,on='key')
# In[15]:
# 向join传入一组DataFrame实现简单的索引合并
another = DataFrame([[7,8],[9,10],[11,12],[16,17]],
index=['a','c','e','f'],columns=['New York','Oregon'])
left2.join([right2,another])
# In[16]:
left2.join([right2,another],how='outer')