python分組後對前百分之二十的數字聚合

這幾天實習的時候寫了一大堆pandas處理數據的任務,但是真正卡住人的其實很少,但是唯獨這個需求卡了我很久

具體的內容是:算出年齡最大的百分之二十的人的年齡佔總年齡的比例

當時數據量幾個g,所以你也不知道每個城市有多少人,所以情況會比例子複雜很多

先寫上例子

直接上代碼

# 1.先拿到每個月的年齡總值
df_count = df1.groupby(['city']).sum().reset_index()
df_final_1 = df_count[['city', 'age']]

# 2.拿到每個月年齡前百分之二十有多少人
df_people_num = df1.groupby(['city']).count().reset_index()
df_people_num['age'] = df_people_num['age'].apply(lambda x: x//5)
df_final_2 = df_people_num[['city', 'age']]
list_longth = list(df_final_2['age'])
# 3.按照排序對每個月的人數進行排序
df_final_3 = pd.merge(df_final_1, df_final_2, on='city')
df_final = pd.merge(df_final_3, df1, on='city')
df_final = df_final[['city', 'age_x', 'age_y', 'age', 'name']]
df_final = df_final.sort_values(['city', 'age'])

# 4.得到前百分之二十的人的消費額
answer = list()
for n in range(0, len(list_longth)):
    ret = df_final.groupby(by="city", sort='False').tail(list_longth[n])
    ret1 = ret.groupby("city")['age'].sum().reset_index()
    answer.append(ret1.iloc[n])
new_list = list()
for i in range(0, len(answer)):
    new_list.append(answer[i][1])
df_test = df_final.groupby('city').sum().reset_index()
df_test = df_test[['city', 'age']]
df_test['top_20_age'] = new_list
df_test['top_20_proportion'] = df_test['top_20_age']/df_test['age']
print(df_test)

 

其中可能有些地方重複,有空再來完善吧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章