- 行索引、列索引、条件索引
- 分组聚合
Groupby
import pandas as pd df = pd.read_csv("https://cdn.coggle.club/Pokemon.csv") df.head(5)
# 迭代打印所有的分组数据 for tmp_df in df.groupby('Type 1'): # key, 表格 print(tmp_df[0], tmp_df[1].shape)
bug有69行,12列。得到一组新的对应值。
1. # 根据Type 1分组统计HP的最大值 2. df.groupby("Type 1")["HP"].max()
1. # 根据Type 1分组统计Legendary的取值个数 2. df.groupby("Type 1")["Legendary"].value_counts()
apply
# 根据Type 1分组统计HP的最大值 df.groupby("Type 1")["HP"].apply(np.max) # df.groupby("Type 1")["HP"].max()
# 根据Type 1分组统计HP的最大值 df.groupby("Type 1")["HP"].apply(lambda x: np.max(x))
和上面的用法一样。
1. # 根据Type 1分组统计HP的中位数 2. df.groupby("Type 1")["HP"].apply(lambda x: np.percentile(x, 0.5))
agg
对多个统计值进行聚合。
df.groupby("Type 1")["HP"].agg(['mean', 'min', 'max']) # df.groupby("Type 1")["HP"].max()
agg 更高效。
# df.groupby("Type 1")["HP"].agg(['mean', 'min', 'max']) df.groupby("Type 1").agg({ 'HP': ['mean', 'max', 'min'], 'Attack': ['mean', 'max', 'min'], })
transform
这俩个代码意义相同,结果一样。
1. df["Type 1"].map( 2. df.groupby("Type 1")["HP"].max() # series 【index】 3. )
df.groupby("Type 1")["HP"].transform('max') # 返回的就是和样本个数一样多的一个特征!