📜  pandas 计算每个值的频率 - Python (1)

📅  最后修改于: 2023-12-03 15:18:15.490000             🧑  作者: Mango

pandas 计算每个值的频率 - Python

在数据分析和数据处理中,我们经常需要计算数据中每个值出现的频率,这时就可以使用 Pandas 库的 value_counts() 方法。

该方法可以返回一个 Pandas series,其中每个唯一值对应着它在原始 series 中出现的频率。

语法
pandas.Series.value_counts(dropna=True, sort=True, ascending=False, normalize=False, bins=None, 
                            drop_duplicates=True)

该方法的参数说明如下:

  • dropna:布尔值,表示是否排除缺失值,默认为 True。
  • sort:布尔值,表示是否按照频率值排序,默认为 True。
  • ascending:布尔值,表示是否按照升序排序,默认为 False。
  • normalize:布尔值,表示是否以频率值的百分比形式返回结果,默认为 False。
  • bins:整数或序列,表示分割数目或分割点序列。
  • drop_duplicates:布尔值,表示是否丢弃重复值。
例子

下面我们以一个例子来展示 value_counts() 方法的使用。

我们先创建一个包含一些数字的 Pandas series:

import pandas as pd

data = [1, 1, 2, 3, 3, 3]
s = pd.Series(data)

然后我们使用 value_counts() 方法计算每个值出现的频率:

value_counts = s.value_counts()
print(value_counts)

输出结果如下:

3    3
1    2
2    1
dtype: int64

我们可以看到,输出结果是一个 Pandas series,其中每个唯一值对应着它在原始 series 中出现的频率。例如,数字 3 在原始 series 中出现了 3 次,因此它对应的频率值为 3。数字 1 在原始 series 中出现了 2 次,因此它对应的频率值为 2。

如果我们想要按照频率值降序排序:

value_counts = s.value_counts(sort=True, ascending=False)
print(value_counts)

输出结果如下:

3    3
1    2
2    1
dtype: int64

现在,输出结果与之前相同,但是它们按照频率值降序排序。

如果我们想要以频率值的百分比形式返回结果:

value_counts = s.value_counts(normalize=True)
print(value_counts)

输出结果如下:

3    0.500000
1    0.333333
2    0.166667
dtype: float64

现在,输出结果是一个 Pandas series,其中每个唯一值对应着它在原始 series 中出现的频率的百分比。例如,数字 3 在原始 series 中出现了 3 次,占总数的 50%,因此它对应的频率值为 0.5。

结论

Pandas 的 value_counts() 方法可以方便地计算数据中每个值出现的频率,并返回一个 Pandas series。该方法的灵活参数可以让我们对计算结果进行排序/升序等更多控制,十分实用。