【发布时间】:2022-01-07 14:59:52
【问题描述】:
总结 - 最终目标是根据 Pandas 中交叉表函数的输出与共享索引处的另一个数据框计算百分比。
我尝试过的 - 尝试将原始交叉表数据框拆分为分子和 div 另一个数据框,但它似乎并没有那样工作,因为结果都是 nan
代码
import pandas as pd
import numpy as np
df1 = pd.DataFrame({"Vntg": ["2020-01","2020-02","2020-03"],"Funded":[1000,2000,4000]}) # This is the df we want to use as denominator
df2 = pd.DataFrame({"Vntg": ["2020-01","2020-01","2020-01","2020-02","2020-02","2020-03"],
"Funded":[1000,1000,1000,2000,2000,4000],
"Payment":[10,20,20,30,15,30],
"Timing":[0,1,2,0,1,0]})
ct_df = pd.crosstab(df2["Vntg"], df2["Timing"], values=df2["Payment"], aggfunc="sum", margins=False)
ct_df = ct_df.cumsum(axis=1) # This is the crosstab df we want to use as numerator on a cumulative basis
从cumsum 开始累积付款,有没有办法将df1 中的资金金额转换/替换为百分比?在此先感谢并感谢所有帮助。
我还查看了下面的帖子,但它似乎没有解决我的问题: Customized normalization of pd.crosstab()
编辑:
所以我认为有些人对这个问题感到困惑。澄清一下,最终结果将是在时间 0 时从 df2 中取出 10,然后除以资助金额,即 2020-01 年份从 df1 中取出 1000。对于随后在 1 的时间,它只是来自df2 的 (10+30),并为同一年份从df1 分配了相同的资金数额,因为它本质上没有改变。结果将由其他年份的相同逻辑填充。
【问题讨论】:
-
嗨 limasuma - 我对两个数据框中各个列的含义有些困惑,尤其是
df2中的“付款”和“时间”。当您说“以百分比形式将df1中的资金金额转换/替换为美元价值”时,将列除以其总数是否合适? -
@DaveB 是的,这是我最初的想法,只需将资金列划分为
df1,但它似乎并没有解决我的问题,因为它返回所有nan
标签: python python-3.x pandas dataframe crosstab