按pandas数据帧的索引对所有列的值进行分组

时间:2016-07-15 18:05:45

标签: python pandas

我想基本上建立一个总数为no的分布。用户观看的视频。监视由1表示0表示。用户是数据框的索引。

假设数据如下:

A   B   C
User1   1   1   0
User2   0   1   0
User3   1   0   1

我希望每次使用该行中所有1的计数。

我正在做这样的事情,但似乎没有用。我不想使用一些applymap函数,因为它看起来很慢。

d.groupby(d.index).sum(axis=1)

给出轴无法识别的错误

2 个答案:

答案 0 :(得分:0)

如果您在索引中有重复项,则可以将groupbysum一起使用:

print (df)
       A  B  C
User1  1  1  0
User1  1  1  1
User2  0  1  0
User3  1  0  1

print (df.groupby(df.index).sum().sum(1))
User1    5
User2    1
User3    2
dtype: int64

如果没有重复项,请仅使用sum - Psidom comment

df.sum(axis=1)

编辑:

import matplotlib.pyplot as plt

df.sum(axis=1).plot.hist()
plt.show()

graph

答案 1 :(得分:-1)

使用DataFrame的转置方法。

In [38]: d = pd.DataFrame({'A':[1,0,1],'B':[1,1,0],'C':[0,0,1]},index=['User1','User2','User3'])

In [39]: d
Out[39]:
       A  B  C
User1  1  1  0
User2  0  1  0
User3  1  0  1

In [40]: d.transpose()
Out[40]:
   User1  User2  User3
A      1      0      1
B      1      1      0
C      0      0      1

In [41]: d.transpose().sum()
Out[41]:
User1    2
User2    1
User3    2
dtype: int64

或者,正如Psidom建议的那样,对DataFrame的列进行求和。

In [55]: d.sum(axis=1)
Out[55]:
User1    2
User2    1
User3    2
dtype: int64