首页 > 解决方案 > 从 pandas .mean() 中排除列

问题描述

我有一个 df,其中包含给定年份的给定统计数据中每个团队的排名。它看起来像这样:

teamID  yearID  W   L   IP  WHIP    K%  BB% HR/9    ERA FIP ERA-    FIP-    K/BB+   WHIP+   K%+ BB%+    WAR
1209    Athletics   2001.0  2.0 6.0 3.0 7.0 19.0    9.0 1.0 7.0 5.0 7.0 5.0 8.0 7.0 11.0    10.0    4.0

我想为每一行创建一个具有平均排名的列,但是执行 df.mean(axis=1) 包括年份(2001 年)并且真的把数字扔掉了。任何人都知道如何使用 lambda 和 .apply() 来完成此操作,或者是否有一个可以排除某些列的 kwarg?我还没有找到一个。我想跨年这样做,这就是为什么 yearID 列是必要的。

标签: pythonpandas

解决方案


只需将其从您的计算中排除,loc[]并使用对列的理解。

df = pd.read_csv(io.StringIO("""teamID  yearID  W   L   IP  WHIP    K%  BB% HR/9    ERA FIP ERA-    FIP-    K/BB+   WHIP+   K%+ BB%+    WAR
1209    Athletics   2001.0  2.0 6.0 3.0 7.0 19.0    9.0 1.0 7.0 5.0 7.0 5.0 8.0 7.0 11.0    10.0    4.0"""), sep="\s+")

df["mean"] = df.loc[:,[c for c in df.columns if c!= "yearID"]].mean(axis=1)

输出

         teamID  yearID    W    L   IP  WHIP    K%  BB%  HR/9  ERA  FIP  ERA-  FIP-  K/BB+  WHIP+   K%+  BB%+  WAR    mean
1209  Athletics  2001.0  2.0  6.0  3.0   7.0  19.0  9.0   1.0  7.0  5.0   7.0   5.0    8.0    7.0  11.0  10.0  4.0  6.9375

推荐阅读