利用Python進行資料聚合和分組運算

2021-08-27 21:20:30 字數 3986 閱讀 7918

#created by: darren chen

#created on: 2018/8/2

import pandas as pd

import numpy as np

import os,time,sys

#像sql這種結構化查詢語言所執行的分組運算的種類十分有限

''' 分組鍵的多種形式:

1、列表或陣列,其長度與待分組的軸長度相同。

2、dataframe的某個列名。

3、字典或series,給出待分組的值與分組名之間的對應關係。

4、函式,用來處理軸索引或者索引中的各個標籤。

'''df = pd.dataframe()

print(df)

grouped = df['data1'].groupby(df['key1'])

print(grouped, '\n') #grouped是乙個中間物件

print(grouped.mean(), '\n')

df.groupby(['key1','key2']).size()

#一次傳入多個陣列

means = df.groupby([df['key1'],df['key2']]).mean()

means

means.unstack()

#分組鍵可以是任意長的陣列

states = np.array(['shandong','zhejiang','zhejiang','shandong','shandong'])

years = np.array([2018,2018,2020,2018,2020])

df.groupby([states,years]).mean()

#可以對分組進行迭代

for name,group in df.groupby('key1'):

print(name)

print(group)

for (k1,k2),group in df.groupby(['key1','key2']):

print(k1,k2)

print(group)

#groupby預設是在axis=0上進行分組

df.dtypes

grouped = df.groupby(df.dtypes,axis=1)

dict(list(grouped))

#選取乙個或一組列(大資料集很可能只需要對部分進行聚合)

df.groupby(['key1','key2'])[['data2']].mean()

s_grouped = df.groupby(['key1','key2'])['data2']

s_grouped

s_grouped.mean()

#通過字典或series進行分組

people = pd.dataframe(np.random.randn(5,5),

columns=['a','b','c','d','e'],

index= ['james','koby','darren','yao','lin'])

people.ix[2:3,['b','c']] = np.nan #新增幾個缺失值

people

by_columns.sum()

map_series

people.groupby(map_series,axis=1).sum()

#通過函式進行分組

people.groupby(len).sum()

key_list = ['one','one','one','two','two']

people.groupby([len,key_list]).sum() #可以將函式和其他混合使用

#根據索引級別分組

columns = pd.multiindex.from_arrays([['us','us','us','jp','jp'],

[1,3,5,1,3]],names=['city','tensor'])

columns

hier_df = pd.dataframe(np.random.randn(4,5),columns=columns)

hier_df

hier_df.groupby(level='city',axis=1).count()

#資料聚合

dfdf.groupby(['key1']).quantile(0.9) #計算樣本分位數

#使用自己的聚合函式

def peak_to_peak(arr):

return arr.max() - arr.min()

grouped = df.groupby(['key1'])

grouped.agg(peak_to_peak)

grouped.describe().unstack()

#面向列的多函式應用

os.chdir('c:\\users\\cfc47\\onedrive\\文件\\資料分析\\data')

tips = pd.read_csv('tips.csv')

tips.head()

grouped = tips.groupby(['***','smoker'])['tip']

grouped.mean()

#傳入一組函式或函式名

grouped.agg(['mean','size',peak_to_peak])

grouped.agg([('foo','mean'),('bax',np.std)]) #(名字, 函式或函式名)

#對不同列應用不同的函式

grouped.agg()

#以無索引形式返回資料

tips.groupby(['***','smoker']).mean()

tips.groupby(['***','smoker'],as_index=false).mean()

####分組級運算和轉換

#為df新增衣蛾用於存放各索引分組平均值的列

#方法一:先聚合再合併

dfk1_means = df.groupby('key1').mean().add_prefix('mean_')

k1_means

pd.merge(df,k1_means,left_on='key1',right_index=true)

#方法二:

people

key = ['one','two','one','two','one']

people.groupby(key).mean()

people.groupby(key).transform(np.mean)

#tranform會將乙個函式應用到各個分組,然後將結果放到適當的位置上

def demean(arr):

return arr - arr.mean()

demeaned = people.groupby(key).transform(demean)

demeaned

demeaned.groupby(key).mean()

#根據分組選出最高的5個tip值

def top(df,n=5,column='tip'):

return df.sort_index(by=column)[-n:]

top(tips,n=6)

#禁止分組鍵

####分位數和桶分析

frame = pd.dataframe()

factor = pd.cut(frame.data1,4)

factor[:10]

#cut返回的物件可直接用於groupby

def get_stats(group):

return

grouped = frame.data2.groupby(factor)

#返回分位數編號

grouping = pd.qcut(frame.data1,10,labels=false)

grouped = frame.data2.groupby(grouping)

利用python進行資料分析

目錄 10 minutes to pandas 翻譯 pandas中loc iloc ix的區別 pandas dropna函式 pandas中dataframe的stack unstack 和pivot 方法的對比 pandas中關於set index和reset index的用法 python匿...

利用python進行資料分析

利用python進行資料分析,需要了解一些基本的方法,比如掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的資料進行回歸分析,並得出相對精確地結論。這部分需要掌握的知識點如下 回歸分析 線性回歸 邏輯回歸 基本的分類演算法 決策樹 隨機森林 樸素貝葉斯 基本的聚類演算法 k mean...

《利用Python進行資料分析》筆記

之前的筆記一直記在我的印象筆記上,今天突然想到 不如直接記在部落格上,印象筆記只記錄生活上的事,這樣也分工明確一些。同時也能和大家分享,也許可以幫助到別人。由於這個學習筆記系列主要還是用於個人學習總結用,所以會比較凌亂,望大家理解!2017 9 23 p151 pd.dropna thresh 其中...