0
我有如下一个数据帧:如何获得Python中groupby列的百分位数?
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
'office_id': list(range(1, 7)) * 2,
'sales': [np.random.randint(100000, 999999) for _ in range(12)]})
要获得的销售,国家百分明智的,我已经写了下面的代码:
pct_list1 = []
pct_list2 = []
for i in df['state'].unique().tolist():
pct_list1.append(i)
for j in range(0,101,10):
pct_list1.append(np.percentile(df[df['state'] == i]['sales'],j))
pct_list2.append(pct_list1)
pct_list1 = []
colnm_list1 = []
for k in range(0,101,10):
colnm_list1.append('perct_'+str(k))
colnm_list2 = ['state'] + colnm_list1
df1 = pd.DataFrame(pct_list2)
df1.columns = colnm_list2
df1
我们可以优化这个代码?
我觉得,我们还可以使用
df1 = df[['state','sales']].groupby('state').quantile(0.1).reset_index(level=0)
df1.columns = ['state','perct_0']
for i in range(10,101,10):
df1.loc[:,('perct_'+str(i))] = df[['state','sales']].groupby('state').quantile(float(i/100.0)).reset_index(level=0)['sales']
如果有任何其他选择,请帮助。
谢谢。
它在某种程度上起作用,我需要100th百分位数太长,与名称与perct_n同名的列太长。 – marupav
在quants的定义中将1更改为1.1,并将'str(x)'更改为''perct _'+ str(x)'或''perct _%。f'%(100 * x)' – Peter9192
感谢Peter.That我需要的。 – marupav