【问题标题】:Counting repeating words with numpy and pandas Python用 numpy 和 pandas Python 计算重复单词
【发布时间】:2021-11-19 21:24:48
【问题描述】:

我想编写一个代码,它在a 中为每个不同的值输出重复值的数量。然后我想制作一个熊猫数据表来打印它。下面的sums 代码不起作用我如何才能使它起作用并获得预期的输出?

import numpy as np
import pandas as pd 

a = np.array([12,12,12,3,43,43,43,22,1,3,3,43])
uniques = np.unique(a)
sums = np.sum(uniques[:-1]==a[:-1])

预期输出:

Value    Repetition Count
1        1
3        3
12       3
22       1
43       4

【问题讨论】:

  • sort 列,然后使用groupby().count()

标签: python arrays pandas numpy count


【解决方案1】:

根据数组a定义一个数据框df。然后,使用.groupby() + .size() 获取唯一值的大小/计数,如下:

a = np.array([12,12,12,3,43,43,43,22,1,3,3,43])
df = pd.DataFrame({'Value': a})

df.groupby('Value').size().reset_index(name='Repetition Count')

结果:

   Value  Repetition Count
0      1                 1
1      3                 3
2     12                 3
3     22                 1
4     43                 4

编辑

如果您还想要计数百分比,您可以使用:

(df.groupby('Value', as_index=False)
   .agg(**{'Repetition Count': ('Value', 'size'), 
           'Percent': ('Value', lambda x: round(x.size/len(a) *100, 2))})
)

结果:

   Value  Repetition Count  Percent
0      1                 1     8.33
1      3                 3    25.00
2     12                 3    25.00
3     22                 1     8.33
4     43                 4    33.33

或将.value_countsnormalize=True 一起使用

pd.Series(a).value_counts(normalize=True).mul(100)

结果:

43    33.333333
12    25.000000
3     25.000000
22     8.333333
1      8.333333
dtype: float64

【讨论】:

  • 除了重复计数之外,我还可以放置一个百分比条,例如 43 的值,它在 4/12 发生,所以它是 33.3%
  • @georgehere 好的,请稍等。
  • 感谢感谢
  • @georgehere 查看我的百分比编辑。
【解决方案2】:

你可以使用groupby:

>>> pd.Series(a).groupby(a).count()
1     1
3     3
12    3
22    1
43    4
dtype: int64

value_counts():

>>> pd.Series(a).value_counts().sort_index()
1     1
3     3
12    3
22    1
43    4
dtype: int64

【讨论】:

    【解决方案3】:

    如果你从 np.array 制作一个 pandas 数据框然后使用 value_counts() 是最简单的。

    df = pd.DataFrame(data=a, columns=['col1'])
    
    print(df.col1.value_counts())
    43    4
    12    3
    3     3
    22    1
    1     1
    

    【讨论】:

      猜你喜欢
      • 2016-11-12
      • 2017-10-09
      • 2020-07-28
      • 2019-10-16
      • 2020-11-07
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多