条件迭代的键,DataFrameGroupBy中的值

时间:2015-02-20 10:22:16

标签: python loops dictionary pandas conditional

我在python(2.7)中有一个pandas(v 0.12)数据帧data。关于groupby()中的AB colmuns,我data形成了groups <class 'pandas.core.groupby.DataFrameGroupBy'>类型的对象。

我想循环并将函数应用于groups中包含多行的数据帧。我的代码如下,此处每个数据帧都是键值对中的value

import pandas as pd        
groups = data.groupby(['A','B'])
len(groups)
>> 196320 # too large - will be slow to iterate through all
for key, value in groups:
   if len(value)>1:
      print(value)

由于我只对将函数应用于len(value)>1的值感兴趣,因此可以通过嵌入此条件来过滤并仅遍历满足此条件的键值对来节省时间。我可以执行类似下面的操作来确定每个value的大小,但我不确定如何将此聚合与原始groups对象结合。

size_values = data.groupby(['A','B']).agg({'C' : [np.size]})

我希望问题很明确,如果需要澄清,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以将组的长度分配回列并按其值过滤:

data['count'] = data.groupby(['A','B'],as_index=False)['A'].transform(np.size)

之后你可以:

data[data['count'] > 1].groupby(['A','B']).apply(your_function)

如果是一次性操作,只需跳过作业:

    data[data.groupby(['A','B'],as_index=False)['A'].transform(np.size) > 1].groupby(['A','B']).apply(your_function)