【发布时间】:2017-01-04 07:02:30
【问题描述】:
使用 Pandas 数据框按功能分组,我想按列 c_b 分组并计算列 c_a 和列 c_c 的唯一计数。我的预期结果是,
预期结果,
c_b,c_a_unique_count,c_c_unique_count
python,2,2
c++,2,2
遇到关于unhashable type 的奇怪错误,有人有什么想法吗?谢谢。
输入文件,
c_a,c_b,c_c,c_d
hello,python,numpy,0.0
hi,python,pandas,1.0
ho,c++,vector,0.0
ho,c++,std,1.0
go,c++,std,0.0
源代码,
sample = pd.read_csv('123.csv', header=None, skiprows=1,
dtype={0:str, 1:str, 2:str, 3:float})
sample.columns = pd.Index(data=['c_a', 'c_b', 'c_c', 'c_d'])
sample['c_d'] = sample['c_d'].astype('int64')
sampleGroup = sample.groupby('c_b')
results = sampleGroup.count()[:,[0,2]]
results.to_csv(derivedFeatureFile, index= False)
错误信息,
Traceback (most recent call last):
File "/Users/foo/personal/featureExtraction/kaggleExercise.py", line 134, in <module>
unitTest()
File "/Users/foo/personal/featureExtraction/kaggleExercise.py", line 129, in unitTest
results = sampleGroup.count()[:,[0,2]]
File "/Users/foo/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 1997, in __getitem__
return self._getitem_column(key)
File "/Users/foo/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py", line 2004, in _getitem_column
return self._get_item_cache(key)
File "/Users/foo/miniconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 1348, in _get_item_cache
res = cache.get(item)
TypeError: unhashable type
【问题讨论】:
-
sampleGroup.count()[:,[0,2]]你想在这里做什么?如果您想获取第一列和第三列,请尝试将其更改为sampleGroup.count().iloc[:,[0,2]](您也可以在 groupby 对象上执行此操作)。 (df.groupby('a')[[0, 2]].count()) -
感谢@ayhan,您的方法有效,但结果似乎只有
c_a和c_d列,也许我认为是错误的——我认为c_b是自动包含的,因为它是分组依据所在的列,c_a,c_d 3,3 2,2 -
是分组列成为索引。您也可以通过标签访问这些列。预期的输出是什么?
-
@ayhan,我在帖子的开头部分发布了我的预期结果,并且我希望输出组列值本身(在我的示例中,它是列
c_b的值,并且是唯一的计算列c_a和c_c)。如果您有任何解决方案,那就太好了。 -
对不起,我错过了。我发布了一个答案,没有将
c_b作为索引。
标签: python python-2.7 pandas dataframe group-by