python - 如何在 Pandas DataFrame 中一次获取多列的值计数?

标签 python numpy pandas

给定一个 Pandas DataFrame,它有多个具有分类值(0 或 1)的列,是否可以方便地同时获取每列的 value_counts?

例如,假设我生成一个DataFrame如下:

import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 2, (10, 4)), columns=list('abcd'))

我可以得到这样的 DataFrame:

   a  b  c  d
0  0  1  1  0
1  1  1  1  1
2  1  1  1  0
3  0  1  0  0
4  0  0  0  1
5  0  1  1  0
6  0  1  1  1
7  1  0  1  0
8  1  0  1  1
9  0  1  1  0

如何方便地获取每列的值计数并方便地获取以下内容?

   a  b  c  d
0  6  3  2  6
1  4  7  8  4

我目前的解决方案是:

pieces = []
for col in df.columns:
    tmp_series = df[col].value_counts()
    tmp_series.name = col
    pieces.append(tmp_series)
df_value_counts = pd.concat(pieces, axis=1)

但一定有更简单的方法,比如堆叠、旋转或分组?

最佳答案

只需调用 apply并通过 pd.Series.value_counts :

In [212]:
df = pd.DataFrame(np.random.randint(0, 2, (10, 4)), columns=list('abcd'))
df.apply(pd.Series.value_counts)
Out[212]:
   a  b  c  d
0  4  6  4  3
1  6  4  6  7

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

相关文章:

python - 在 map 上绘制不同大小的圆圈

python - Python中的直方图匹配

python - 如何在大数据文件中使用 pandas 删除重复的行?

python - 如何使用 groupby 和过滤数据框来创建新列

python - Spark 在 Scala 中打印 DataFrame 的形状

python - 将列名称映射到随机森林特征重要性

python - 将子字符串的第一个实例与正则表达式匹配

python - Largest Number At Least Twice of Others 的极端情况

Python 按位或

python - numpy 和 GMPY2 在速度方面与 GMP 相比如何?