python - 如何获取 Pandas 列的频率计数?

标签 python pandas

我想知道如何获取 pandas 数据框项目的频率计数,如下面的问题:

import numpy as np
import pandas as pd

df = pd.DataFrame({'A': [1,1,2,3,5,2],
                  'B': [10,10,10,300,400,500],
                  'C': ['p','p','q','q','q','q']})


print(df)
   A    B  C
0  1   10  p
1  1   10  p
2  2   10  q
3  3  300  q
4  5  400  q
5  2  500  q

要求的输出

 A          B         C
(1,2)     (10,3)     ('p', 2)
(2,2)     (300,1)    ('q', 4)
(3,1)     (400,1)
(5,1)     (500,1)

最佳答案

您可以构造一个 Counter 的列表每列的对象,并重建数据框:

from collections import Counter

c = [Counter(j for j in i).items() for i in df.values.T]
pd.DataFrame.from_records(c, index=df.columns).T

  A         B       C
0  (1, 2)   (10, 3)  (p, 2)
1  (2, 2)  (300, 1)  (q, 4)
2  (3, 1)  (400, 1)    None
3  (5, 1)  (500, 1)    None

为了排序计数:

from operator import itemgetter
c = [sorted(
            Counter(j for j in i).items(), 
            key=itemgetter(1), 
            reverse=True) 
     for i in df.values.T]
pd.DataFrame.from_records(c, index=df.columns).T

     A         B       C
0  (1, 2)   (10, 3)  (q, 4)
1  (2, 2)  (300, 1)  (p, 2)
2  (3, 1)  (400, 1)    None
3  (5, 1)  (500, 1)    None

关于python - 如何获取 Pandas 列的频率计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58137537/

相关文章:

python - python中的Numba jit警告解释

python - 如何区分点散布matplotlib on pick

基于列名前缀的 Pandas 数据透视列

python - 具有匹配标题的两个数据帧列之间的关联

python - 让 pandas 打印完整的字符串

python - 无论如何让 Django CMS 页面只能访问(站点端)只有少数人?

python - 在python中打开一个新的行分隔文本文件

python - 连接字典

python - 在 Pandas 中将 float64 列转换为 int64

python - 在 pandas DataFrame 中检查 dtype 时的注意事项