跨多列的 Pandas 平均值

Sco*_*art 1 python pandas

在熊猫中,我想计算参加每项运动的人的平均年龄和体重。我知道我可以循环,但想知道最有效的方法是什么。

df = pd.DataFrame([
    [0, 1, 0, 30, 150],
    [1, 1, 1, 25, 200],
    [1, 0, 0, 20, 175]
], columns=[
    "Plays Basketball",
    "Plays Soccer",
    "Plays Football",
    "Age",
    "Weight"
])
Run Code Online (Sandbox Code Playgroud)
打篮球 踢足球 踢足球 年龄 重量
0 1 0 30 150
1 1 1 25 200
1 0 0 20 175

我尝试过groupby,但它为每种可能的运动组合创建了一个组。我只需要每项运动的平均年龄和体重。

结果应该是:

年龄 重量
打篮球 22.5 187.5
踢足球 27.5 175.0
踢足球 25.0 200.0

moz*_*way 5

用一个dot乘积并通过计数进行归一化以获得平均值:

df2 = df.filter(like='Plays')

out = df2.T.dot(df[['Age', 'Weight']]).div(df2.sum(), axis=0)
Run Code Online (Sandbox Code Playgroud)

输出:

                   Age  Weight
Plays Basketball  22.5   187.5
Plays Soccer      27.5   175.0
Plays Football    25.0   200.0
Run Code Online (Sandbox Code Playgroud)