计算熊猫数据帧中值的发生次数

时间:2018-01-11 17:07:11

标签: python pandas dataframe cell loc

我有一个pandas数据帧,电影作为行,用户作为列。每个单元格都有一个等级,数值范围从0到2.我想计算表中指定值为0的总出现次数。我怎样才能实现这一点?

数据框示例:

Movie |User 1|User 2|User 3
MovieX|0     |1     |0
MovieY|2     |0     |1

预期产出:

"Total 0 count = 3"

5 个答案:

答案 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()
  • 这将返回数据框中零的数量
  • 有关详细信息,请查看剂量:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.where.html
  • 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()上的文档链接。

相关问题