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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据规整

發(fā)布時間:2023/12/8 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据规整 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

// Pandas分組聚合

創(chuàng)建對象:姓名、歷次測驗(yàn)語文成績,數(shù)學(xué)成績,英語成績

df = pd.DataFrame({'name': ['張三','李四','王五','李四','王五','王五','趙六'],'chinese':np.random.randint(35,100,7),'math':np.random.randint(35,100,7),'english':np.random.randint(35,100,7),'test': ['一','一','一','二','二','三','一'] })df df.index,df.columns

統(tǒng)計(jì)分析:

# 按列求科目成績平均值 df.mean()# 按行求學(xué)生每次考試平均值 df.mean(axis='columns')# 快速綜合統(tǒng)計(jì) df.describe()

分組:
groupby(),一般指以下一個或多個操作步驟的集合

  • Splitting 將數(shù)據(jù)分組
  • Applying 對每個分組應(yīng)用不同的function
  • Combining 使用某種數(shù)據(jù)結(jié)果展示結(jié)果

# 創(chuàng)建group對象,未進(jìn)行計(jì)算 df.groupby('name')# 調(diào)用函數(shù)做分組計(jì)算,分組后求每組平均值 # 可將列名或列值當(dāng)作分組對象,分組中數(shù)值列會被聚合,非數(shù)值列會從結(jié)果中排除 a = df.groupby('name').mean()# 如果不想使用分組列作為索引,設(shè)置參數(shù)as_index=False b = df.groupby('name',as_index=False).mean()# 對多列分組后求平均值 c = df.groupby(['name','chinese']).mean() c2 = df.groupby(['name','chinese'],as_index=False).mean()

更多操作:

# 分組數(shù)據(jù)的個數(shù) df.groupby('name').size()# 遍歷分組對象 for (method, group) in df.groupby('name'): # print(method) # print(group)print(group.shape)# 對分組后的部分列做統(tǒng)計(jì) df.groupby('name')['math'].describe() # 行列旋轉(zhuǎn) df.groupby('name')['math'].describe().unstack()

聚合:
aggregate(),或agg()

aggregate函數(shù)的參數(shù):

  • 參數(shù)可以是列表,列表元素是指標(biāo)的計(jì)算函數(shù)或特定的指標(biāo)名字符串
  • 參數(shù)可以是字典,函數(shù)會根據(jù)字典內(nèi)容對指定列進(jìn)行不同的指標(biāo)計(jì)算
  • 參數(shù)可以是系統(tǒng)或自定義函數(shù),各分組都進(jìn)行計(jì)算后返回結(jié)果
df# 分組 df.groupby('name').mean()# 聚合參數(shù)是列表 d = df.groupby('name').aggregate(['min',max,np.mean])# 聚合參數(shù)是字典 df.groupby('name').aggregate({'chinese':'min','math':'max'})# 聚合是自定義函數(shù) def hs(arr):return arr.mean()-1df.groupby('name').agg(hs)

其他分組運(yùn)算
運(yùn)用 groupby 函數(shù)進(jìn)行分組后,我們能做的事情還有很多,并不局限于聚合匯總

利用 fliter 函數(shù)來對分組進(jìn)行篩選,留下符合條件的分組:

def filter_func(x):return x['math'].mean() >= 60 # 數(shù)學(xué)成績平均值大于等于60分e = df.groupby('name').filter(filter_func) e.groupby('name').mean()

使用 transform 函數(shù)對所有的數(shù)據(jù)元素進(jìn)行轉(zhuǎn)換計(jì)算:

# 所有列減去60 df.groupby('name').transform(lambda x: x - 60)

運(yùn)用 apply 函數(shù),我們可以一次性對所有的分組進(jìn)行不同規(guī)則的運(yùn)算:

# 某列單獨(dú)計(jì)算 def a2(x):x['chinese'] = x['chinese'] + 10x['english'] -= 10return xdf.groupby('name').apply(a2)

在 groupby 函數(shù)的輸入中自定義分配每一行記錄所屬的分組

如果我們的輸入就是原始數(shù)據(jù)集 df 中的某一列,那么這一列將被作為分組的依據(jù),這種方法比直接輸入列名要顯得麻煩一些

# 傳入結(jié)構(gòu)一樣的列,傳入索引會替換掉原索引 df.groupby(['張三','李四','王五','李四','王五','王五','張三']).mean() df.groupby([0,0,0,0,0,0,0]).mean()

groupby 函數(shù)將會根據(jù)索引值進(jìn)行分組,我們可以通過輸入一個字典對象的方式,來給不同的索引值重新分配組別:

df2 = df.set_index('name') df2# 合并行計(jì)算 mapping = {'張三': '一個人', '趙六': '一個人', '李四': '李四new'} df2.groupby(mapping).mean()# 通過輸入一個列表的形式來使多種映射同時生效: df2.groupby(['name', mapping]).mean()

綜合應(yīng)用:輸出所有人在所有測試中的數(shù)學(xué)成績

# 所有人在所有測試中的數(shù)學(xué)成績 df.groupby(['name',df['test']])['math'].mean().unstack().fillna(0)

總結(jié)

以上是生活随笔為你收集整理的数据规整的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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