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