gpt4 book ai didi

python - 将 DataFrame 中的值求和到父索引中 - Python/Pandas

转载 作者:行者123 更新时间:2023-11-28 18:27:08 25 4
gpt4 key购买 nike

我正在处理 Mint 交易数据,并尝试将每个类别的值汇总到它的父类别中。

我有一个从我所有的 Mint 交易创建的数据框 mint_data:

mint_data = tranactions_data.pivot(index='Category', columns='Date', values='Amount')

mint_data image

还有一个带有 Category:Parent 对的字典(这使用 xlwings 从 excel 表中提取)

cat_parent = cats_sheet.range('A1').expand().options(dict).value

Cat:Parent image

我不确定如何循环遍历 mint_data df 并将金额汇总到父类别中。我想保持数据框格式完全相同,只是替换父值。

这是一个例子:

        A B C D E
par_a 0 0 5 0 0
cat1a 5 2 3 2 1
cat2a 0 1 2 1 0
par_b 1 0 1 1 2
cat1b 0 1 2 1 0
cat2b 1 1 1 1 1
cat3b 0 1 2 1 0

我也有一个字典

{'par_a': 'par_a',
'cat1a': 'par_a',
'cat2a': 'par_a',
'par_b': 'par_b',
'cat1b': 'par_b',
'cat2b': 'par_b',
'cat3b': 'par_b'}

我正在尝试让数据框结束

        A B C D E
par_a 5 3 10 3 1
cat1a 5 2 3 2 1
cat2a 0 1 2 1 0
par_b 2 3 6 4 3
cat1b 0 1 2 1 0
cat2b 1 1 1 1 1
cat3b 0 1 2 1 0

最佳答案

让我们将您的字典称为“dct”,然后创建一个映射到父字典的新列:

>>> df['parent'] = df.reset_index()['index'].map(dct).values

A B C D E parent
par_a 0 0 5 0 0 par_a
cat1a 5 2 3 2 1 par_a
cat2a 0 1 2 1 0 par_a
par_b 1 0 1 1 2 par_b
cat1b 0 1 2 1 0 par_b
cat2b 1 1 1 1 1 par_b
cat3b 0 1 2 1 0 par_b

然后按父级求和:

>>> df_sum = df.groupby('parent').sum()

A B C D E
parent
par_a 5 3 10 3 1
par_b 2 3 6 4 3

在许多情况下,您会止步于此,但由于您想要合并父/子数据,因此需要某种合并。 combine_first 在这里会很好地工作,因为它会选择性地按照您想要的方向更新:

>>> df_new = df_sum.combine_first(df)

A B C D E parent
cat1a 5.0 2.0 3.0 2.0 1.0 par_a
cat1b 0.0 1.0 2.0 1.0 0.0 par_b
cat2a 0.0 1.0 2.0 1.0 0.0 par_a
cat2b 1.0 1.0 1.0 1.0 1.0 par_b
cat3b 0.0 1.0 2.0 1.0 0.0 par_b
par_a 5.0 3.0 10.0 3.0 1.0 par_a
par_b 2.0 3.0 6.0 4.0 3.0 par_b

您在评论中提到了多索引,因此您可能更愿意像这样组织它:

>>> df_new.reset_index().set_index(['parent','index']).sort_index()

A B C D E
parent index
par_a cat1a 5.0 2.0 3.0 2.0 1.0
cat2a 0.0 1.0 2.0 1.0 0.0
par_a 5.0 3.0 10.0 3.0 1.0
par_b cat1b 0.0 1.0 2.0 1.0 0.0
cat2b 1.0 1.0 1.0 1.0 1.0
cat3b 0.0 1.0 2.0 1.0 0.0
par_b 2.0 3.0 6.0 4.0 3.0

关于python - 将 DataFrame 中的值求和到父索引中 - Python/Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557822/

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