python - 有效计算分组在一组其他分组变量中的多个独立列的 value_counts

标签 python pandas dataframe

我需要计算大量独立列中的值的计数(例如由 value_counts 表示),这些独立列由一组固定的 2-5 个其他列分组。此练习是对多达数百万行和多达 50-100 列的数据进行数据挖掘的一部分。因此,解决方案需要尽可能高效。为了将内存中的所有这些数据集中在一起,我在读取源数据时预先将所有列转换为“类别”类型。

可以使用以下数据作为示例:

raw_data = {'grpVar1': ['A', 'A', 'A', 'B', 'B', 'B'], 
        'grpVar2': ['X', 'Y', 'X', 'Y', 'Z','X'], 
        'catVar1': ['car', 'bike', 'car', 'bike', 'car', 'bike'], 
        'catVar2': ['red','blue','black', 'red','blue','black']}
df = pd.DataFrame(raw_data, columns = ['grpVar1', 'grpVar2', 'catVar1', 'catVar2'])
df = df.astype('category')

对于上述数据,我希望得到如下汇总数据。请忽略组的排序顺序。

grpVar1  grpVar2  Column   Value    Count
A        X        catVar1  car        2
         Y        catVar1  bike       1
B        X        catVar1  bike       1
         Y        catVar1  bike       1
         Z        catVar1  car        1
A        X        catVar2  black      1
                  catVar2  red        1
         Y        catVar2  blue       1
B        X        catVar2  black      1
         Y        catVar2  red        1
         Z        catVar2  blue       1

我能想到的一个选择是融化数据帧然后进行值计数。但从内存角度(因为现在数据不再是分类的和未压缩的)和性能角度来看,这似乎不是一个明智的选择。请指教。

最佳答案

循环遍历要熔化的列。进行 groupby 和连接。这可能会节省一些空间。说到时间,这可能无法击败熔化函数。

df['cnt'] = 1
output = []
for col in df.columns[2:-1]:
    grp = df[list(df.columns[:2])+ [col] + ['cnt']].groupby(list(df.columns[:2])+ [col]).sum().dropna()
    grp['column'] = col
    grp.rename({col: 'value'}, inplace=True)
    output.append(grp)

output = pd.concat(output)

关于python - 有效计算分组在一组其他分组变量中的多个独立列的 value_counts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58684278/

相关文章:

python - Pyinstaller 可执行文件在旧 OS X 上失败

python - 将 Pandas 数据框列映射到字典

python - Pandas :按时间间隔的另一个数据帧过滤数据帧

python - 创建一个列,其中包含 Python 中 URL 中每一行的域名

pandas:阻止 pandas 自动将 0.40 显示为 0.4

python - 将日期时间日期转换为字符串 Python Dataframe 时的SettingWithCopyWarning 消息

python - 如何在 Django 中将未处理的异常打印到控制台而不是浏览器?

python - 打开路径中有空格的文件

python - pandas - 要列出到字典的字符串

python - 检索与 pandas 中另一列中元素第一次出现相对应的列中的值 - python