python和pandas:将pct列添加到数据帧

时间:2015-11-03 22:14:58

标签: python pandas

以下代码:

import pandas
import io

d = """
pid,type,speed
1,a,10.5
1,a,11.3
1,a,12.5
1,a,11.5
1,b,7.5
1,b,7.6
1,b,8.7
1,b,9.4
2,a,11.3
2,a,11.1
2,a,11.4
2,a,11.6
2,b,6.5
2,b,4.4
2,b,5.6"""

frame = pandas.read_csv(io.StringIO(d))
frame['pct'] = frame.groupby(['pid','type']).transform(lambda x: x/sum(x))
print(frame)

pct应该是唯一type值中整体pid的pct,因此对于pid 1,类型a的值和b将是.5(4 a行和4 b行。

1 个答案:

答案 0 :(得分:1)

此代码:

frame['pct'] = frame.groupby(['pid','type']).transform(lambda x: x/sum(x))

可以获得pidtype组的速度百分比。你想要的是每个'pid'的'type'计数的百分比?

试试这个:

frame =frame.groupby(['pid','type']).size().reset_index()
frame.groupby(['pid']).transform(lambda x: x/sum(x))