#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 其中...