gpt4 book ai didi

python - 如何使用 MultiIndex 将 "Total"行附加到 Pandas 数据帧

转载 作者:行者123 更新时间:2023-12-04 12:37:51 25 4
gpt4 key购买 nike

假设您有一个带有 MultiIndex 的简单 Pandas 数据框:

df = pd.DataFrame(1, index=pd.MultiIndex.from_tuples([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2')]),
columns=['col1', 'col2'])
打印为表格:
           col1  col2
one elem1 1 1
elem2 1 1
two elem1 1 1
elem2 1 1
问题 :如何向该数据框添加“总计”行?
预期输出:
             col1  col2
one elem1 1.0 1.0
elem2 1.0 1.0
two elem1 1.0 1.0
elem2 1.0 1.0
Total 4.0 4.0

第一次尝试:朴素的实现
如果我只是忽略 MultiIndex 并遵循 standard way
df.loc['Total'] = df.sum()
输出:
              col1  col2
(one, elem1) 1 1
(one, elem2) 1 1
(two, elem1) 1 1
(two, elem2) 1 1
Total 4 4
似乎是正确的,但是MultiIndex 被转换为 Index([('one', 'elem1'), ('one', 'elem2'), ('two', 'elem1'), ('two', 'elem2'), 'Total'], dtype='object')
第二次尝试:明确
df.loc['Total', :] = df.sum()
或(感到沮丧并只是出于恶意而改变轴)
df.loc['Total', :] = df.sum(axis=1)
输出(两个调用相同):
             col1  col2
one elem1 1.0 1.0
elem2 1.0 1.0
two elem1 1.0 1.0
elem2 1.0 1.0
Total NaN NaN
MultiIndex 未转换,但 Total 错误(NaN != 4)。

最佳答案

解决方案
您必须删除 df.sum() 的索引只需使用以下值:

df.loc['Total', :] = df.sum().values
输出:
             col1  col2
one elem1 1.0 1.0
elem2 1.0 1.0
two elem1 1.0 1.0
elem2 1.0 1.0
Total 4.0 4.0

为什么第二次尝试是错误的?
第二次尝试几乎是正确的。但是 df.sum() 有 Index(['col1', 'col2'], dtype='object') .因此,pandas 无法匹配索引。新索引 ('Total', '') 已附加但没有值。
但是为什么 df.loc['Total', :] = df.sum(axis=1)也失败?它具有正确的多索引。 Pandas 完全按照你说的去做,即对列求和。所以, df.sum(axis=1)为您提供以下数据框:
one  elem1    2
elem2 2
two elem1 2
elem2 2
此数据框无法与原始 df 匹配在任何有意义的意义上。

关于python - 如何使用 MultiIndex 将 "Total"行附加到 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62620539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com