一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Pandas中的 transform()結合 groupby()用法示例詳解

Pandas中的 transform()結合 groupby()用法示例詳解

2022-01-03 15:15cnhwl Python

這篇文章主要介紹了Pandas中的 transform() 結合 groupby() 用法示例,本文通過一個餐廳數據集給大家分享解決方案,示例代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

首先,假設我們有如下餐廳數據集:

import pandas as pd

df = pd.DataFrame({
'restaurant_id': [101,102,103,104,105,106,107],
'address': ['A','B','C','D', 'E', 'F', 'G'],
'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'],
'sales': [10,500,48,12,21,22,14]
})

Pandas中的 transform()結合 groupby()用法示例詳解

如果我們想知道:每個餐廳在城市中所占的銷售額百分比是多少?預期得到的輸出是:

Pandas中的 transform()結合 groupby()用法示例詳解

相比于原來的數據集,多了兩列,分別是某個城市所有餐廳的銷售總額,以及每個餐廳在城市中所占的銷售額百分比。解決方案有兩個:

方案一(較麻煩):

1、使用 groupby('city') 基于城市進行分組,對于這些組中的每一個組,選中其銷售額列 ['sales'],然后使用函數 apply(sum) 或者sum() 對城市的銷售額進行求和。

之后,新列被重命名為 city_total_sales 并且索引被重置(注意不能漏了 reset_index() ,因為 groupby('city') 生成的索引是城市,而我們希望城市作為普通列)。

city_sales = df.groupby('city')['sales']
           .sum().rename('city_total_sales').reset_index()

得到的 city_sales 如下:

Pandas中的 transform()結合 groupby()用法示例詳解

2、用 merge() 函數把 city_sales 合并回去,得到的 df_new 如下:

df_new = pd.merge(df, city_sales, how='left')

Pandas中的 transform()結合 groupby()用法示例詳解
3、最后,求百分比并保留兩位小數,結果如下:

df_new['pct'] = df_new['sales'] / df_new['city_total_sales']
df_new['pct'] = df_new['pct'].apply(lambda x: format(x, '.2%'))

Pandas中的 transform()結合 groupby()用法示例詳解

方案二(便捷):

1
transform() 函數在執行轉換后保留與原始數據集相同數量的項目。因此,使用 groupby() 然后使用 transform(sum) 會返回相同的輸出,結果如下圖:

df['city_total_sales'] = df.groupby('city')['sales']
                         .transform('sum')

代碼翻譯過來就是:數據集基于城市進行分組,然后選定銷售額列,對每組的銷售額進行求和,返回一個和原列長度一樣的新列

Pandas中的 transform()結合 groupby()用法示例詳解

2

與方案一相同。

df['pct'] = df['sales'] / df['city_total_sales']
df['pct'] = df['pct'].apply(lambda x: format(x, '.2%'))

總結:可以看出,在對 DataFrame 進行分組 groupby() 之后,如果是使用 apply() 或者直接使用某個統計函數,得到的新列的長度與分組得到的組數是一樣的;而如果使用 transform()得到的新列與 DataFrame 中列的長度是一樣的

到此這篇關于Pandas中的 transform()結合 groupby()用法示例詳解的文章就介紹到這了,更多相關Pandas groupby() 用法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/cnhwl/article/details/120169278

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色综合色狠狠天天久久婷婷基地 | 日韩毛片在线影视 | 午夜久久久久久亚洲国产精品 | 精品免费国产 | 不卡视频一区二区 | 国产精品香蕉夜间视频免费播放 | 小早川怜子亚洲综合中文字幕 | 国产区综合另类亚洲欧美 | 五月天婷婷精品免费视频 | 亚洲精品午夜久久aaa级久久久 | 精品国产中文字幕在线视频 | 国产成人一区二区三区 | 短篇同学新婚h系列小说 | gogort人体的最新网站 | 欧美性野久久久久久久久 | youporn在线 | 日本在线观看www | 久久se视频精品视频在线 | 精品日韩欧美一区二区三区在线播放 | 欧美日韩国产精品va | 欧美丰满大乳大屁在线观看股 | 成人网18免费网站 | 日本亚洲欧洲高清有码在线播放 | 波多野结衣中文丝袜字幕 | 第一次处破女18分钟 | 欧亚专线欧洲m码可遇不可求 | 阿 好深 快点 老师受不了 | 无人区在线观看免费完整版免费 | 国产久热精品 | 国产一区在线看 | 成年看片免费高清观看 | 人与动人物aaaa | 果冻传媒天美传媒在线小视频播放 | 亚洲六月丁香六月婷婷色伊人 | 国产老熟 | 草莓影音 | 77色视频在线 | 91亚色视频在线观看 | 日韩欧美一区二区三区免费观看 | 久久精品国产亚洲AV热无遮挡 | 亚洲麻豆精品 |