pandas.DataFrame.query()
方法在加载或绘图时,用于(预/后)筛选数据非常有用。它尤其适用于方法链。
我经常想要对一个 pandas.Series
应用相同的逻辑,例如在执行了像 df.value_counts
这样返回 pandas.Series
的方法之后。
示例
假设有一个巨大的表格,其中包含列 Player, Game, Points
,我想绘制得分超过14次3分球的球员的直方图。我首先必须对每个球员的得分进行求和 (groupby -> agg
),这将返回大约1000个球员及其总得分的系列。应用 .query
逻辑看起来会像这样:
df = pd.DataFrame({
'Points': [random.choice([1,3]) for x in range(100)],
'Player': [random.choice(["A","B","C"]) for x in range(100)]})
(df
.query("Points == 3")
.Player.values_count()
.query("> 14")
.hist())
我发现的唯一解决方案是让我执行一个不必要的任务并且打破方法链:
(points_series = df
.query("Points == 3")
.groupby("Player").size()
points_series[points_series > 100].hist()
方法链接和查询方法可以帮助保持代码易读性,而子集过滤可能会很快变得混乱。
# just to make my point :)
series_bestplayers_under_100[series_prefiltered_under_100 > 0].shape
请帮我摆脱困境!谢谢