以下代码:
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
行。
答案 0 :(得分:1)
此代码:
frame['pct'] = frame.groupby(['pid','type']).transform(lambda x: x/sum(x))
可以获得pid
和type
组的速度百分比。你想要的是每个'pid'的'type'计数的百分比?
试试这个:
frame =frame.groupby(['pid','type']).size().reset_index()
frame.groupby(['pid']).transform(lambda x: x/sum(x))