我想基本上建立一个总数为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)
给出轴无法识别的错误
答案 0 :(得分:0)
如果您在索引中有重复项,则可以将groupby
与sum
一起使用:
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()
答案 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