我有一个pandas数据帧,电影作为行,用户作为列。每个单元格都有一个等级,数值范围从0到2.我想计算表中指定值为0的总出现次数。我怎样才能实现这一点?
数据框示例:
Movie |User 1|User 2|User 3
MovieX|0 |1 |0
MovieY|2 |0 |1
预期产出:
"Total 0 count = 3"
答案 0 :(得分:3)
使用它,将数据帧转换为布尔值,等级为零,然后转换为numpy ndarray,并使用np.sum,默认为axis = None,对整个数组求和:
df.eq(0).values.sum()
输出
3
答案 1 :(得分:3)
两个sum
(df==0).sum().sum()
Out[543]: 3
答案 2 :(得分:2)
尝试使用下面的代码将所有数据作为列表列表(df.values
),将其展平并过滤掉仅为0的列表。此列表的长度返回所需的数字:
def number_of_zeros(df):
return len(list(filter(lambda x: x==0, df.values.flatten())))
这使用基本的python列表函数而不是pandas数据帧函数。
答案 3 :(得分:2)
dataframe.where(dataframe == 0).count()
where
条件返回的数据框与调用者的类型相同,所有行都为零,然后您只需调用.count()
axis
答案 4 :(得分:1)
如果我理解正确,听起来您希望在所有列中看到值频率分布,尽管您正在寻找零的特定值。
In [1]: import pandas as pd
In [2]: df = pd.read_csv('data.csv')
In [3]: df.values
Out[3]:
array([['batman', 1, 1, 0, 1],
['avengers', 2, 2, 1, 2],
['hulk', 0, 1, 0, 0],
['superman', 1, 1, 2, 1],
['ironman', 2, 2, 2, 2]], dtype=object)
In [4]: pd.Series(df.values[:,1:].flatten()).value_counts()
Out[4]:
2 8
1 8
0 4
dtype: int64
然后,您可以为特定示例利用计数值0。
pd.Series(df.values[:,1:].flatten()).value_counts()[0]
以下是value_counts()
和flatten()
上的文档链接。