2015-11-05 30 views
1

我有两个DataFrames,我使用分成不同的小组通过他们的月:在Pandas中查找具有相同名称的组?

grouped1 = data1[key].set_index('Time').groupby(pd.TimeGrouper(freq='M')) 
grouped2 = data2[key].set_index('Time').groupby(pd.TimeGrouper(freq='M')) 

grouped2可能有更多的群体比grouped1,反之亦然。我想在分组的DataFrame之间共享相同名称的组上运行统计信息。

例如,如果grouped1有一个叫April组,grouped2有一个名为April组,我想运行在这些组统计数据。我想循环访问所有共享相同名称的组。

我该怎么做? `

+0

'.groups'将返回groupby对象的组,然后您可以找到这些组的交集,然后获得特定组调用'.get_group' – EdChum

回答

1

您可以使用.groups这将返回一个字典一个groupby对象获得团体,键是组值,然后你可以使用setintersection找到共同的列,然后使用.get_group得到普遍组:

In [252]:  
df = pd.DataFrame({'id':['a','b','c','b','c'], 'data':np.random.randn(5)}) 
df1 = pd.DataFrame({'id':['a','a','a','b','d'], 'data':np.random.randn(5)}) 
gp1 = df.groupby('id') 
gp2 = df1.groupby('id') 
print(gp1.groups) 
print(gp2.groups) 

{'b': [1, 3], 'a': [0], 'c': [2, 4]} 
{'b': [3], 'a': [0, 1, 2], 'd': [4]} 

In [ ]:  
common = set(gp1.groups.keys()).intersection(set(gp2.groups.keys())) 
common 

In [270]: 
for gp in common: 
    print('first:\n') 
    print(gp1.get_group(gp).head()) 
    print('\nsecond: \n') 
    print(gp2.get_group(gp).head()) 

first: 

     data id 
1 -0.252577 b 
3 0.274945 b 

second: 

     data id 
3 1.521554 b 
first: 

     data id 
0 0.142474 a 

second: 

     data id 
0 1.536180 a 
1 -1.117422 a 
2 1.490307 a