我有下面的 Dataframe 和一个名称向量。
| 姓名|年龄|
| - -|- -|
| Pandas|五个|
| 北极熊|七个|
| 海马|一个|
我想根据向量中的名称选择行,并计算所选行的平均年龄。
let names = vec!["panda", "seahorse"];
let avg = df.lazy()
.select([col("name").filter(|c| names.contains(c))])
.agg([col("age").mean()]);
直觉告诉我们,传递一个函数给过滤器(就像我做的那样),然而这是错误的。显然有某种Expr API在起作用。它是如何工作的?我觉得文档有点令人费解。
2条答案
按热度按时间w1jd8yoj1#
如果使用特性
is_in
,则可以直接对另一个Expr
中存在的列进行筛选,这将导致以下结果。第一个
gtlvzcf82#
我不确定是否有一种简单的方法可以按照您想要的方式进行筛选。您可以选择创建一个单独的DataFrame,其中包含您想要筛选的名称并执行联接:
不清楚您是否希望对从该过滤返回的所有年龄执行平均值计算(这是您的问题中的措辞),如果是这样的话,那么这段代码应该对您有效。
你的代码看起来像是在计算所有Pandas的均值和所有海马的均值,如果是这样的话,你可以使用.groupby().agg()链:
其产生: