這幾天實習的時候寫了一大堆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)
其中可能有些地方重複,有空再來完善吧