我有这个数据框:
mob.columns
Out[806]: Index([u'country', u'maxterm', u'quantity'], dtype='object')
这是一些数据:
mob.head(5)
Out[807]:
country maxterm quantity
0 China aled 44
1 China fanx 77
2 China grrx 12
3 China hldo 13
4 China jnmp 29
创建新列(即每行列出的数量与每个国家/地区所有数量之和的比率)的最简单方法是什么?我正在尝试 groupby 和 hub 并制作 lambda 函数。这次尝试
mob.groupby(['country', 'maxterm'])['quantity'].apply(lambda x: x / float(sum(x)) )
没用,只是输出了一堆1。如果我可以在原始数据框中创建一个新列,那就最好了。
最佳答案
使用转换
mob.quantity / mob.groupby('country').quantity.transform('sum')
0 0.251429
1 0.440000
2 0.068571
3 0.074286
4 0.165714
Name: quantity, dtype: float64
使用分配
创建一个新列
mob.assign(ratio=mob.groupby('country').quantity.transform(lambda x: x / x.sum()))
country maxterm quantity ratio
0 China aled 44 0.251429
1 China fanx 77 0.440000
2 China grrx 12 0.068571
3 China hldo 13 0.074286
4 China jnmp 29 0.165714
计算选择
%timeit mob.quantity.values / mob.groupby('country').quantity.transform('sum').values
%timeit mob.groupby('country').quantity.transform(lambda x: x / x.sum())
%timeit mob.quantity / mob.groupby('country').quantity.transform('sum')
1000 loops, best of 3: 956 µs per loop
1000 loops, best of 3: 1.53 ms per loop
1000 loops, best of 3: 1.03 ms per loop
关于python - 创建一个新的比率列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319318/