我有一个包含Dist,Class和Count列的数据集。
我想通过dist对该数据进行分组,并将每个组的计数列除以该组的计数总和(将其标准化为一个)。
以下MWE展示了迄今为止的方法。但我想知道:有没有更紧凑/更棒的写作方式?
import pandas as pd
import numpy as np
a = np.random.randint(0,4,(10,3))
s = pd.DataFrame(a,columns=['Dist','Class','Count'])
def manipcolumn(x):
csum = x['Count'].sum()
x['Count'] = x['Count'].apply(lambda x: x/csum)
return x
s.groupby('Dist').apply(manipcolumn)
答案 0 :(得分:2)
获取规范化“计数”列的另一种方法是使用groupby
和transform
获取每个组的总和,然后将返回的系列除以“计数”列。您可以将此系列重新分配给您的DataFrame:
s['Count'] = s['Count'] / s.groupby('Dist')['Count'].transform(np.sum)
这避免了对定制Python函数和apply
的使用的需要。对你问题中的小例子DataFrame进行测试表明它的速度提高了大约8倍。