我正在上大学的时候,正在学习可汗学院的统计类(class),这是对我的重温,也是一种让我快速学习 Pandas 和其他科学Python的方法。

我有一个可汗学院的桌子,像这样:

             | Undergraduate | Graduate | Total
-------------+---------------+----------+------
Straight A's |           240 |       60 |   300
-------------+---------------+----------+------
Not          |         3,760 |      440 | 4,200
-------------+---------------+----------+------
Total        |         4,000 |      500 | 4,500

我想使用 Pandas 重新创建此表。当然我可以使用类似的方法创建一个DataFrame
"Graduate": {...},
"Undergraduate": {...},
"Total": {...},

但这似乎是一种幼稚的方法,会很快崩溃,而且实际上并不能扩展。

我有这样的表的非总计部分:
df = pd.DataFrame(
    {
        "Undergraduate": {"Straight A's": 240, "Not": 3_760},
        "Graduate": {"Straight A's": 60, "Not": 440},
    }
)
df

我一直在寻找,发现了一些有希望的东西,例如:
df['Total'] = df.sum(axis=1)

但是我没有发现任何非常优雅的东西。

我确实找到了crosstab函数,该函数看起来应该可以执行我想要的操作,但是为了做到这一点,我似乎必须为所有这些值创建一个包含1/0的数据帧,这看起来很愚蠢,因为我我已经有了一个汇总。

我发现一些方法似乎可以手动构建新的总计行,但是似乎应该有一个更好的方法,例如:
totals(df, rows=True, columns=True)

或者其他的东西。

这是否存在于 Pandas 中,还是我必须自己拼凑一下自己的方法?

最佳答案

或者分两步,按照您的建议使用.sum()函数(也可能更具可读性):

import pandas as pd

df = pd.DataFrame( {"Undergraduate": {"Straight A's": 240, "Not": 3_760},"Graduate": {"Straight A's": 60, "Not": 440},})

#Total sum per column:
df.loc['Total',:]= df.sum(axis=0)

#Total sum per row:
df.loc[:,'Total'] = df.sum(axis=1)

输出:
              Graduate  Undergraduate  Total
Not                440           3760   4200
Straight A's        60            240    300
Total              500           4000   4500

关于python - 如何在 Pandas 中创建总和行和总和列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53414960/

10-12 22:25
查看更多