gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:11:33 25 4
gpt4 key购买 nike

我需要计算大量独立列中的值的计数(例如由 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com