当GroupBy对象可能不包含某个键

时间:2016-02-17 20:23:51

标签: python pandas

我正在对数据帧进行一些分析,其中一列是一个整数,值为0或1(布尔值排序,但整数形式)。它看起来像这样:

  Nat. | Result
-------|-------
  CA   |  1
  USA  |  0
  GB   |  1
  USA  |  1
  CA   |  0
  GB   |  1

我根据国籍列对数据进行了分组,并且其中一个值(上例中的GB)由偶然产生 - 一个组的所有成员都只有1.这产生了一个问题因为我有一个函数我调用了很多包含group_obj.get_group(0)的内容,这会导致运行时错误“KeyError:0”

我的问题:我想创建以下逻辑:

if (group_obj contains key 0):
   return group_obj.get_group(0)
else:
   print "Group Object contains no 0s"
   return null

由于

我正在使用Python2,Pandas和iPython Notebook。

3 个答案:

答案 0 :(得分:3)

好的,所以这就是我能够做到的:

if key1 in group_obj.groups.keys():
    #Do processing

因此,groupby对象中的keys()方法已经存储了可用的密钥,可以直接访问它。

答案 1 :(得分:2)

使用value_counts,取消堆叠结果以获得列中的结果,然后使用fillna(0)替换所有NaN。

>>> df.groupby('Nationality').Result.value_counts().unstack().fillna(0)
Result       0  1
Nationality      
CA           1  1
GB           0  2
USA          1  1

答案 2 :(得分:0)

要从groupby对象获取一个组并获取一个空数据框,而不是一个错误(如果该组不存在)是这样的:

def get_group(key, dataframe_group):
    if key in dataframe_group.groups.keys():
        return dataframe_group.get_group(key)
    else:
        original_df = dataframe_group.obj
        return original_df.drop(original_df.index)

基本上,首先检查组中是否存在密钥,以及密钥是否没有原始数据帧但没有任何内容。