python:是否可以对分类数据运行数学/统计操作?
我已经将一个较大的df(相对于可用RAM的较大值)转换为分类列。这节省了约80%的内存空间。现在我需要对数据运行数学/统计操作。是否有一种方法可以对熊猫中的分类数据运行诸如python:是否可以对分类数据运行数学/统计操作?,python,pandas,Python,Pandas,我已经将一个较大的df(相对于可用RAM的较大值)转换为分类列。这节省了约80%的内存空间。现在我需要对数据运行数学/统计操作。是否有一种方法可以对熊猫中的分类数据运行诸如sum、mean、max和rank之类的操作 创建df 输出: group owner failed granted_pe slots 0 g1 u1 0 single 1 1 g50 u92 0 shared 8 2 g50 u9
sum
、mean
、max
和rank
之类的操作
创建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
转为范畴
求和
输出:
“TypeError:Category无法执行求和操作”
有没有其他方法可以在不将数据转换回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
注意:
mean
,max
etc方法不适用于分类数据,因为它没有意义 我知道“分类”数据通常是str/object,但在这种情况下,我想要处理的底层数据(例如,“slot”)是数字的。我使用类型category
只是为了节省内存占用。所以我认为可以根据这些值进行计算。当我运行代码时,我得到了这个错误:“ValueError:传递的项数错误24,placement意味着1”def return\u sum(values):
return(sum(values))
df['slots\u sum']=df.merge(pd.DataFrame(df.groupby('group')['slots'].apply(return\u sum)).reset\u index(),on='group')
@KarlBaker assign df=df.merge。。。。。合并将返回一个数据帧,而不是一个序列。我的答案中有工作代码。只要复制粘贴就行了谢谢,它适用于求和函数。我想接下来我必须先将数据转换回数字。@jezrael,当转换成分类的数据是数字时,有没有办法对分类数据运行mean
?我使用分类数据类型将df在内存中的大小减少了约80%。
df['slots_sum'] = df.groupby('group')['slots'].transform('sum')
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