python - 在 Pandas 中查找同名组?

标签 python for-loop pandas grouping

我有两个 DataFrame,我使用它们按月份将其分组:

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 的群组,我想对这些组进行统计。我想循环浏览所有具有相同名称的组。

我该怎么做? `

最佳答案

您可以使用 .groupsgroupby 对象获取组,这会返回一个字典,键是组值,然后您可以使用 setintersection,然后使用 .get_group 获取公共(public)组:

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

关于python - 在 Pandas 中查找同名组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33550516/

相关文章:

python - 如何在 Google BigQuery 中进行数据透视

python - 努力学习 python 的基本部分(检查变量是否等于输入)

python - 在python中创建数组内的数组

python - 计算多列的百分比

javascript - 将 highchart 中的 x y 点绘制为 [[x 点列表],[y 点列表]]

python - 如何过滤 jinja2 模板中的集合?

c++ - for循环在Rcpp中崩溃

bash - 如何将 shell 命令应用于嵌套(并且转义不佳)子目录中的许多文件?

python - 使用 numpy/python 从头开始​​进行多项式展开

python - 基于 2 个数据帧的 pandas 高效数据操作