【发布时间】:2016-10-21 08:11:20
【问题描述】:
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
请帮助我摆脱困境!谢谢
【问题讨论】:
-
我不确定 SO 是否是解决这个问题的最佳地点,因为这是该库开发人员的问题,最好在 githubIMO 上发帖
-
将问题标题更改为更像 SO-Like
标签: python pandas dataframe series method-chaining