我正在对数据帧进行一些分析,其中一列是一个整数,值为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。
答案 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)
基本上,首先检查组中是否存在密钥,以及密钥是否没有原始数据帧但没有任何内容。