最常用的 GroupBy 方法是 apply,apply 将正在操作的对象拆分为多个片段,在每个片段上调用传递给它函数,然后尝试连接这些片段。
还是用前面的小费数据集tips.csv,它的内容如下图:
假设我们想按smoker进行分组并选择前五个tip_pct值:
import numpy as np
import pandas as pd
tips = pd.read_csv("examples/tips.csv")
tips["tip_pct"] = tips["tip"] / tips["total_bill"]
# 自定义函数top,根据选择列tip_pct值最大的前n行
def top(df, n=5, column="tip_pct"):
return df.sort_values(column, ascending=False)[:n]
# 然后按 smoker 进行分组,并使用top函数调用 apply:
result = tips.groupby("smoker").apply(top)
print(result)
输出结果:
total_bill | tip | smo |
---|