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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Pandas转pivot, groupby等结果为dataFrame--彻底解决多表头问题

發(fā)布時間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas转pivot, groupby等结果为dataFrame--彻底解决多表头问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Pandas轉(zhuǎn)pivot, groupby等結(jié)果為dataFrame

問題背景:

在用Pandas進行數(shù)據(jù)分析和處理的時候,常會用到如goupby(),pivot()等方法,這些方法極大簡化了我們的操作復雜度。但另一方面,這些操作之后返回的類型往往卻并不是一個標準的DataFrame。具體的現(xiàn)象就是常會出現(xiàn)多出來的一級表頭,而當我們想要再進行繼續(xù)處理時,它的索引方式就發(fā)生變化了,不便于我們進一步操作。因此我們希望能夠有一種方法將這些返回類型再次變?yōu)槲覀冃枰腄ataFrame類型同時保持原有的表頭。本文就這一問題進行簡單描述。

給定數(shù)據(jù)(借用一下這位朋友的數(shù)據(jù)):

import pandas as pd df= pd.DataFrame({'name': ['張三','李四','王五','張三','王五','張三','趙六','張三','趙六'],'sex': ['男','女','男','男','男','男','女','女','女'],'expense': [2.9,9.0,8.5,5.6,5.6,5.2,1.2,4.5,3.2],'income': [5.2,2.5,6.3,5.6,4.5,5.6,1.2,8.5,1.2]})

df的值

dfname sex expense income 0 張三 男 2.9 5.2 1 李四 女 9.0 2.5 2 王五 男 8.5 6.3 3 張三 男 5.6 5.6 4 王五 男 5.6 4.5 5 張三 男 5.2 5.6 6 趙六 女 1.2 1.2 7 張三 女 4.5 8.5 8 趙六 女 3.2 1.2

現(xiàn)在按性別統(tǒng)計他們的開銷:

df_expense = df.groupby(['sex','name'])['expense'].agg(np.mean)

結(jié)果:

df_expensesex name 女 張三 4.500000李四 9.000000趙六 2.200000 男 張三 4.566667王五 7.050000 Name: expense, dtype: float64

注意,此時的df_expense變成了series,因為這里我們只聚合了一列。而此時的前2列,實際上已經(jīng)變成了df_expense的index

df_expense.indexMultiIndex([('女', '張三'),('女', '李四'),('女', '趙六'),('男', '張三'),('男', '王五')],names=['sex', 'name'])

那么如果直接使用to_frame()方法則不能得到我們想要的結(jié)果(即sex,name,mean_expense各為一列):

pd.DataFrame(df_expense)expense sex name 女 張三 4.500000李四 9.000000趙六 2.200000 男 張三 4.566667王五 7.050000

因為此時它的index仍然是剛才那個Series類型的index。

還好Pandas實際上提供了一種機制,即重置索引。其基本原理是將每一列只要是表頭的項全部放在一起,作為一個完整的表頭名,從而實現(xiàn)將多級表頭合并為同一個表頭的效果:

df_new = pd.DataFrame(df_expense).reset_index()df_newsex name expense 0 女 張三 4.500000 1 女 李四 9.000000 2 女 趙六 2.200000 3 男 張三 4.566667 4 男 王五 7.050000

再檢查一下它的表頭現(xiàn)在是哪些:

df_new.columnsIndex(['sex', 'name', 'expense'], dtype='object')

這樣一來,df_new就又變回了我們想要的DataFrame類型,就方便我們操作了。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Pandas转pivot, groupby等结果为dataFrame--彻底解决多表头问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。