python數據分組與數據透視表、表連接

一、數據分組

1.1 groupby分組

分組鍵可以是列名:

df.groupby("客戶分類")

# 也可按多列分組進行運算
df.groupby(["客戶分類","區域"]).sum()

也可以是Series,將DataFrame的其中一列取出即爲一個Series,比如df[“客戶分類”]

df.groupby(df["客戶分類"])

# 也可按多列分組進行運算
df.groupby([df["客戶分類"],df["區域"]]).sum()

1.2 神奇的aggregate

aggregate可以一次性彙總使用多種聚合函數

# 對分組後的所有列做計數彙總運算
df.groupby("客戶分類").aggregate(["count","sum"])

# 還可針對不同列做不同運算
df.groupby("客戶分類").aggregate({"ID":"count","銷量":"sum"})

最後, 對分組後結果重置索引
DataFrameGroupBy對象經過彙總運算後的形式不是標準的DataFrame形式,轉化方式:

df.groupby("ID").sum().reset_index()

二、數據透視表

pivot_table參數:

pd.pivot_table(data,values=None,columns=None,index=None,aggfunc='mean',
     fill_value=None,margins=False,dropna=True,margins_name='All')

#index 對應Excel中的行那個框
#columns對應列
#aggfunc表示對values的計算類型,可以傳入多個
aggfunc={"ID":"count","sales":"sum"}
#fill對空值的填充,默認NaN
#margins是否顯示合計列(行|列的總計值)
#dropna是否刪除缺失,若爲真,將一整行作爲缺失值刪除
#margins_name表示合計列的列名

將客戶分類作爲index,區域作爲columns,用戶ID作爲values,對values執行count運算

pd.pivot_table(df,values="ID",columns="Area",index="客戶分類",aggfunc='count')

通常對結果也會進行重置索引操作

三、多表拼接

3.1 橫向連接

一對一

兩個表的公共列是一對一的

pd.merge(df1,df2)

多對一

其中一個的公共列有重複,另一個是唯一的

pd.merge(df1,df2,on="ID")

結果是保留df2的重複值,並相應的增加df1的重複值

多對多

pd.merge(df1,df2)

默認尋找兩個表中的公共列,可多列,用列表

當沒有公共列(指列名不一致但內容一致),可分別指定左右連接鍵

pd.merge(df1,df2,left_on="ID",right_on="Number")

索引作爲連接鍵

pd.merge(df1,df2,left_index=True,right_index=True)

#也可混用
pd.merge(df1,df2,left_index=True,right_on="Number")

3.2連接方式

內連接

默認連接方式

pd.merge(df1,df2,on="ID", how="inner")

左連接

以 左表爲基礎,右表若無用Nan填充

外連接

取兩個表的並集,how=“outer”

3.3 重複列名的處理

可以用參數suffixes定義重複的列名,默認爲["_x","_y"]

pd.merge(df1,df2,on="ID", how="inner",suffixes=["_L","_R"])

3.4 縱向連接

普通合併

pd.concat(df1,df2)        #默認保留原有索引

#生成新索引
pd.concat([df1,df2],ignore_index=True)

重疊數據合併

刪除重複值

pd.concat([df1,df2],ignore_index=True).drop_duplicates()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章