python - 创建一个新的比率列

标签 python pandas dataframe

我有这个数据框:

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/

相关文章:

python - style.format() 和小数列的问题

python - 使用 Pandas Styler

python-3.x - Pandas 合并有两个具有相同代码和输入数据的结果

python / Pandas : Calculation based on cell value

python - 从冗长的字典生成时,Pandas DataFrame.from_dict() 性能不佳

scala - 使用 UTF-8 编码在 Spark 中写入 CSV(德语字符)时出现问题

python - 如何简化 if 语句 yes

python - 如何为 scipy.ndimage.label 的特征指定周期连接?

python - Django - 实现在 3 次登录尝试失败时显示 CAPTCHA

python-3.x - cumsum 与平均值 - python