我正在上大学的时候,正在学习可汗学院的统计类(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/