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 讀者可學到以...