一、數據分組
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()