日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pandas合并groupby_pandas实践之GroupBy()

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pandas合并groupby_pandas实践之GroupBy() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


官網地址:https://pandas.pydata.org/docs/reference/groupby.html

pandas中對數據進行分組操作的方法,官方有很詳細的教程。下面的案例是真實遇到的問題,看一看用pandas是如何解決的。


構造數據import pandas as pdimport numpy as npdf = pd.DataFrame(data={ "boss":["A"]*3+["B"]*3+["C"]*4, "owner":["A1","A1","A2","B1","B2","B2","C1","C1","C2","C2"], "month":[1,2,1,1,1,2,1,2,1,2], "fk_money":[10,20,30,40,50,60,70,80,90,100],})
數據展示
bossownermonthfk_money
0AA1110
1AA1220
2AA2130
3BB1140
4BB2150
5??BB2260
6CC1170
7CC1280
8CC2190
9CC22100

解釋:比如第一條數據,老板A手下的業務員A1,在第1個月的放款金額為10萬。


問題一、老板手下的業務員在哪個月的放款金額最多?

解決思路:

  • 按照owner分組,降序排列,取第一個數據
result1_df = df.sort_values(by="fk_money",ascending=False).groupby(by="owner").head(1)result1_df
bossownermonthfk_money
9CC22100
7CC1280
5BB2260
3BB1140
2AA2130
1AA1220

解釋:老板C手下的業務員C2在第2個月的放款金額最大為100萬。

拓展:如何取第二大的數據?

  • GroupBy.nth(),取每一組第n行的數據,n從0開始,0代表第一行。

  • 沒有第n行的時候,不取。
result1_df = df.sort_values(by="fk_money",ascending=False).groupby(by="owner",as_index=False).nth(1)result1_df
ownerbossmonthfk_money
A1A110
B1B150
C1C170
C2C190
問題二、業務員每月放款金額占比情況?

解決思路:

  • 計算出每個業務員總的放款金額owner_total_fk_money

  • 將df與計算好的owner_total_fk_money合并

  • fk_money除以owner_total_fk_money得到需要的數據

  • ### 代碼實現:owner_total_fk_money?=?df.groupby(by="owner",as_index=False).agg({"fk_money":"sum"})result1_df = pd.merge(df,owner_total_fk_money,on="owner",how="left",suffixes=("","_total"))result1_df["rate"] = (result1_df["fk_money"]/result1_df["fk_money_total"]).map(lambda x:"{:.2%}".format(x))result1_df
    bossownermonthfk_moneyfk_money_totalrate
    0AA11103033.33%
    1AA12203066.67%
    2AA213030100.00%
    3BB114040100.00%
    4BB215011045.45%
    5BB226011054.55%
    6CC117015046.67%
    7CC128015053.33%
    8CC219019047.37%
    9CC2210019052.63%
    解釋:A1業務員在第一個月放款10萬,占其總放款(30萬)比例為33.33%,第二個月放款20萬,占比為66.67%
    問題三、每個老板手下業務員放款占比?

    解決思路:

  • 需要知道每個老板總的放款金額,boss_df

  • 需要知道每個業務員的放款金額,owner_df

  • 按照boss字段合并boss_df和owner_df

  • 業務員的放款金額除以每個老板總的放款金額

  • # 計算每一個boss的總fk_moneyboss_df = df.groupby(by="boss",as_index=False).agg({"fk_money":"sum"})# 計算每一個owner的總fk_moneyowner_df = df.groupby(by=["boss","owner"],as_index=False).agg({"fk_money":"sum"})# 合并owner_df和boss_dfresult2_df = pd.merge(owner_df,boss_df,on="boss",how="left",suffixes=("_owner","_boss"))result2_df["占比"] = (result_df["fk_money_owner"]/result_df["fk_money_boss"]).map(lambda x:"{:.2%}".format(x)result2_df
    bossownerfk_money_ownerfk_money_bossreate
    0AA1306050.00%
    1AA2306050.00%
    2BB14015026.67%
    3BB211015073.33%
    4CC115034044.12%
    5CC219034055.88%

    解釋:老板A手下的A1占總放款金額(60萬)比例為50%。

    ----END----

    總結

    以上是生活随笔為你收集整理的pandas合并groupby_pandas实践之GroupBy()的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。