gpt4 book ai didi

python pandas 是否可以对分类数据运行数学/统计运算?

转载 作者:行者123 更新时间:2023-12-01 08:12:53 25 4
gpt4 key购买 nike

我已将大型 df(相对于我的可用 RAM 而言较大)转换为分类列。这节省了约 80% 的内存空间。现在我需要对数据运行数学/统计运算。有没有办法对 pandas 中的分类数据运行 summeanmaxrank 等操作?

创建df

df = pd.DataFrame([['g1', 'u1', 0, 'single', 1],
['g50', 'u92', '0', 'shared', '8'],
['g50', 'u92', '0', 'shared', '1']],
columns=['group', 'owner', 'failed','granted_pe', 'slots'])
df = (df.astype(dtype={'group':'str', 'owner':'str','failed':'int', 'granted_pe':'str', 'slots':'int'}))
print(df)

输出:

  group owner  failed granted_pe  slots
0 g1 u1 0 single 1
1 g50 u92 0 shared 8
2 g50 u92 0 shared 1

转换为分类

for feat in ('group', 'owner', 'failed', 'granted_pe', 'slots'):
df[feat] = df[feat].astype('category')

获取总和

df['slots_sum'] = df.groupby('group')['slots'].transform('sum')

输出:

“类型错误:分类无法执行求和运算”

是否有另一种方法可以在不将数据转换回 int 的情况下执行此操作?

最佳答案

您可以在此处使用apply并合并回原来的df

def return_sum(values):
return(sum(values))

df = df.merge(pd.DataFrame(df.groupby('group')['slots'].apply(return_sum)).reset_index(),on='group')
df = df.rename(columns={'slots_x': 'slots', 'slots_y': 'slot_sum'})
print(df)

输出

  group owner failed granted_pe   slots  slots_sum
0 g1 u1 0 single 1 1
1 g50 u92 0 shared 8 9
2 g50 u92 0 shared 1 9

注意:meanmax 等方法不适用于分类数据,因为它没有意义。

关于python pandas 是否可以对分类数据运行数学/统计运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55130061/

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