计数独特的价值观,我们有一个数据帧,看起来像这样:大熊猫:在数据帧
> df.ix[:2,:10]
0 1 2 3 4 5 6 7 8 9 10
0 NaN NaN NaN NaN 6 5 NaN NaN 4 NaN 5
1 NaN NaN NaN NaN 8 NaN NaN 7 NaN NaN 5
2 NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN
我们只是希望在数据帧的所有唯一值的计数。一个简单的解决办法是:
df.stack().value_counts()
然而: 1.它看起来像stack
返回一个副本,而不是一个视图,它是存储在这种情况下,令人望而却步。它是否正确? 2.我想按行对数据框进行分组,然后获取每个分组的不同直方图。如果我们忽略stack
的内存问题并立即使用它,那么如何正确进行分组?
d = pd.DataFrame([[nan, 1, nan, 2, 3],
[nan, 1, 1, 1, 3],
[nan, 1, nan, 2, 3],
[nan,2,2,2, 3]])
len(d.stack()) #14
d.stack().groupby(arange(4))
AssertionError: Grouper and axis must be same length
堆叠数据帧有一个多指标,与一些数量小于n_rows*n_columns
的长度,因为nan
s的除去。我们不知道如何建立我们的分组。只是在第一级进行操作会好得多,但之后我仍然坚持如何应用我实际需要的分组。
d.stack().groupby(level=0).groupby(list('aabb'))
KeyError: 'a'
编辑:一种解决方案,不使用叠加:
f = lambda x: pd.value_counts(x.values.ravel())
d.groupby(list('aabb')).apply(f)
a 1 4
3 2
2 1
b 2 4
3 2
1 1
dtype: int64
看起来笨重,虽然。如果有更好的选择,我很高兴听到它。
编辑:丹的评论显示我有一个错字,虽然纠正仍然没有让我们走到终点。
''df.stack().groupby(list('aaaabbb'))。value_counts()''适合我。 –
@DanAllan嗯,value_counts快捷方式已经在0.13以上关闭(以为它已被列入白名单,但不要猜...) –