gpt4 book ai didi

python - 多索引计算到新列

转载 作者:行者123 更新时间:2023-12-01 01:05:44 25 4
gpt4 key购买 nike

我有一个像这样的数据框。

status               new                    allocation          
asset csh fi eq csh fi eq
person act_type
p1 inv 0.0 0.0 100000.0 0.0 0.0 1.0
rsp 0.0 30000.0 20000.0 0.0 0.6 0.4
tfsa 10000.0 40000.0 0.0 0.2 0.8 0.0

右侧三列是每种 act_type 的总计百分比。以下确实正确计算了列:

# set the percent allocations
df.loc[idx[:,:],idx["allocation",'csh']] = df.loc[idx[:,:],idx["new",'csh']] / df.loc[idx[:,:],idx["new",:]].sum(axis=1)
df.loc[idx[:,:],idx["allocation",'fi']] = df.loc[idx[:,:],idx["new",'fi']] / df.loc[idx[:,:],idx["new",:]].sum(axis=1)
df.loc[idx[:,:],idx["allocation",'eq']] = df.loc[idx[:,:],idx["new",'eq']] / df.loc[idx[:,:],idx["new",:]].sum(axis=1)

我尝试在一行上结合“csh”、“fi”、“eq”进行这些计算,如下所示:

df.loc[idx[:,:],idx["new", ('csh', 'fi', 'eq')]] / df.loc[idx[:,:],idx["new",:]].sum(axis=1)

但这会导致 ValueError: 无法在未指定级别且没有重叠名称的情况下加入

有什么建议我可以如何将这三行减少为一行代码,以便我将 ('csh','fi','eq') 除以帐户总数并在下一列中获取百分比?

最佳答案

首先 idx[:,:] 应简化为 :,然后使用 DataFrame.div通过 axis=0 并对于新列使用 renameDataFrame.join :

df1=df.loc[:, idx["new",('csh', 'fi', 'eq')]].div(df.loc[:, idx["new",:]].sum(axis=1),axis=0)
df = df.join(df1.rename(columns={'new':'allocation'}, level=0))
print (df)
status new allocation
asset csh fi eq csh fi eq
person act_type
p1 inv 0.0 0.0 100000.0 0.0 0.0 1.0
rsp 0.0 30000.0 20000.0 0.0 0.6 0.4
tfsa 10000.0 40000.0 0.0 0.2 0.8 0.0

关于python - 多索引计算到新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373284/

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