Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:类别内的百分比_Python_Pandas - Fatal编程技术网

Python 熊猫:类别内的百分比

Python 熊猫:类别内的百分比,python,pandas,Python,Pandas,我有一个这样的数据框,除了有更多的行和大小,比如: size amount 1 big 1 2 big 9 3 small 3 4 small 1 我想得到这样一个数据框,其中amountPct是数量除以相同大小的数量之和 size amountPct 1 big 0.10 2 big 0.90 3 small 0.75 4 small 0.25 我可以通过重塑数据帧,除以每个大小的总

我有一个这样的数据框,除了有更多的行和大小,比如:

   size amount
1   big      1
2   big      9
3 small      3
4 small      1
我想得到这样一个数据框,其中amountPct是数量除以相同大小的数量之和

   size amountPct
1   big      0.10
2   big      0.90
3 small      0.75
4 small      0.25
我可以通过重塑数据帧,除以每个大小的总和,然后将其重塑回原始形状来实现这一点,但是有没有更优雅的方式来实现呢


PS:我问了R同样的问题,但现在我想知道熊猫的答案

像这样的东西怎么样:

df = pd.DataFrame({'size':['big', 'big', 'small', 'small'], 'amount':[1, 9, 3, 1]})
df['pct'] = df.groupby('size')['amount'].apply(lambda x: x.astype(float)/x.sum())

像这样的怎么样:

df = pd.DataFrame({'size':['big', 'big', 'small', 'small'], 'amount':[1, 9, 3, 1]})
df['pct'] = df.groupby('size')['amount'].apply(lambda x: x.astype(float)/x.sum())

这是问题的R版本:这是问题的R版本:在0.13.1中,这将通过rank包含,速度也会更快:所以这很有效,谢谢,但我很难理解为什么。。。你能解释一下吗?在lambda中,x是什么?@nicolaskruchten本例中的x是“金额”列@EdChum谢谢!那么,对列调用一次apply,还是对每个元素调用一次apply?x、 astypefloat是整个列还是一个元素?x.sum是一组一组的总和吗?这些规则是如何运作的@nicolaskruchten在本例中,每个元素将调用一次,但实现在cython中进行了优化。我认为它比手写的loopin 0.13.1更快,这将通过rank包含。速度也会更快:所以这很有效,谢谢,但我很难理解为什么。。。你能解释一下吗?在lambda中,x是什么?@nicolaskruchten本例中的x是“金额”列@EdChum谢谢!那么,对列调用一次apply,还是对每个元素调用一次apply?x、 astypefloat是整个列还是一个元素?x.sum是一组一组的总和吗?这些规则是如何运作的@nicolaskruchten在本例中,每个元素将调用一次,但在cython中对实现进行了优化,我认为这比手工编写的for循环更快