python資料處理包pandas之分組聚合

2021-10-05 04:29:17 字數 4837 閱讀 4982

2. 資料聚合

3. 分組運算和轉換

分組計算三步曲:拆分 -> 應用 -> 合併拆分:

df = pd.dataframe(

)

1.1 對series進行分組
grouped = df[

'data1'

].groupby(df[

'key1'])

# 多級分組

df['data1'

].groupby(

[df[

'key1'

], df[

'key2']]

).mean(

)

1.2 對dataframe進行分組
df.groupby(

'key1'

).mean(

)# 分組後需要顯示的列

means = df.groupby(

['key1'

,'key2'])

.mean()[

'data1'

]# 將行索引轉換成列

means.unstack(

)df.groupby(

['key1'

,'key2'])

['data1'

].mean(

)

1.3 每個分組的元素個數
df.groupby(

['key1'

,'key2'])

.size(

)

1.4 對分組進行迭代
for name, group in df.groupby(

'key1'):

print name

print group

1.5 分組後轉化為字典
d =

dict

(list

(df.groupby(

'key1'))

)

1.6 按列分組
grouped = df.groupby(df.dtypes, axis=1)

dict

(list

(grouped)

)

1.7 通過字典進行分組
df = pd.dataframe(np.random.randint(1,

10,(5

,5))

, columns=

['a'

,'b'

,'c'

,'d'

,'e'],

index=

['alice'

,'bob'

,'candy'

,'dark'

,'emily'])

df.ix[1,

1:3]

= np.nan

1)

1.8 通過函式分組
df = pd.dataframe(np.random.randint(1,

10,(5

,5))

, columns=

['a'

,'b'

,'c'

,'d'

,'e'],

index=

['alice'

,'bob'

,'candy'

,'dark'

,'emily'])

def_dummy_group

(idx)

:print idx

return idx

df.groupby(_dummy_group)

1.9 多級索引資料根據索引級別來分組
columns = pd.multiindex.from_arrays([[

'china'

,'usa'

,'china'

,'usa'

,'china'],

['a'

,'a'

,'b'

,'c'

,'b']]

, names=

['country'

,'index'])

df = pd.dataframe(np.random.randint(1,

10,(5

,5))

, columns=columns)

df.groupby(level=

'country'

, axis=1)

.count(

)df.groupby(level=

'index'

, axis=1)

.count(

)

2.1 內建聚合函式
df = pd.dataframe(

)df[

'data1'

].groupby(df[

'key1'])

.sum

()

2.2 自定義聚合函式
def

peak_verbose

(s):

print

type

(s)return s.

max(

)- s.

min(

)def

peak

(s):

return s.

max(

)- s.

min(

)

grouped = df.groupby(

'key1'

)grouped.agg(peak_verbose)

2.3 應用多個聚合函式
grouped[

'data1'

,'data2'

].agg(

['mean'

,'std'

, peak]

)# 給聚合後的函式去名

grouped[

'data1'

].agg([(

'agerage'

,'mean'),

('max-range'

, peak)

])

2.4 給不用的列應用不同的聚合函式
d =

grouped.agg(d)

2.5 重置索引
grouped.agg(d)

.reset_index(

)df.groupby(

'key1'

, as_index=

false

).agg(d)

3.1 transform

df = pd.dataframe(

)

# 給df每行都新增乙個以key1分組後的平均值

k1_mean = df.groupby(

'key1'

).mean(

).add_prefix(

'mean_'

)# merge進行合併

pd.merge(df, k1_mean, left_on=

'key1'

, right_index=

true

)# transform進行簡化處理

k1_mean = df.groupby(

'key1'

).transform(np.mean)

.add_prefix(

'mean_'

)

3.2 距平化
df = pd.dataframe(np.random.randint(1,

10,(5

,5))

, columns=

['a'

,'b'

,'c'

,'d'

,'e'],

index=

['alice'

,'bob'

,'candy'

,'dark'

,'emily'])

defdemean

(s):

return s - s.mean(

)key =

['one'

,'one'

,'two'

,'one'

,'two'

]demeaned = df.groupby(key)

.transform(demean)

demeaned.groupby(key)

.mean(

)

df = pd.dataframe(

)# 根據 column 排序,輸出其最大的 n 行資料

deftop

(df, n=

2, column=

'data1'):

return df.sort_values(by=column, ascending=

false)[

:n]top(df, n=5)

df.groupby(

'key1').

(top)

# 傳遞引數

df.groupby(

'key1').

(top, n=

3, column=

'data2'

)# 禁用分組鍵

df.groupby(

'key1'

, group_keys=

false).

(top)

Python金融資料處理之Pandas包

在python的pandas包中,有兩種資料結構可以很方便地用於儲存複雜的資料,為series和dataframe。一 series 首先先講一下series,series是dataframe的基礎。series可以認為是個具有索引 index 的一維陣列,可以和程式設計中另乙個常用的概念hash ...

Python 資料處理

將檔案切分,存入列表 strip split with open james.txt as jaf data jaf.readline james data.strip split 資料檔案為 2 34,3 21,2.34,2.45,3.01,2 01,2 01,3 10,2 22 print ja...

Python 資料處理

本場 chat 為 python 資料處理課程,包括 python 基礎知識 極簡教程 提公升 python 執行效率的方法 爬蟲簡介 scrapy selenium 自動化測試框架 簡易分布式 redis 分詞程式設計 jieba 資料儲存 本地資料上傳 hive 通過本場 chat 讀者可學到以...