为了账号安全,请及时绑定邮箱和手机立即绑定

使用重复条目取消堆叠 DF

使用重复条目取消堆叠 DF

MMTTMM 2023-05-23 15:53:27
我是熊猫的新手,我有一个数据集,我想更改它的说明。它有 40.000 行和 13 列,包含 2010 年 ('Último') 和 2009 年 ('PENÚLTIMO') 的财务信息我感兴趣的部分是:'NOME'(公司名称),'GRUPO_DFP'(目前它只是资产负债表,但我打算添加更多),'ORDEM_EXER'(当前或去年,2010 年或 2009 年) , 'DS_CONTA'(资产类型),'VL_CONTA'(价值)顺便说一句,这都是公开信息。所以,删除我不想要的列,我得到这个:问题从这里开始。它像普通的 csv 一样显示信息:ORDEM_EXER-----DS_CONTA-------------------------VL_CONTAPENÚLTIMO-----Ativo Total-----------------------702571987.0ÚLTIMO--------Ativo Total-----------------------802819794.0PENÚLTIMO-----Caixa e Equivalentes de Caixa-----31037881.0ÚLTIMO--------Caixa e Equivalentes de Caixa-----25219700.0但我想要的是:                  ÚLTIMO      PENÚLTIMO DS_CONTAAtivo Total ----802819794.0--702571987.0Caixa e Eq..----25219700.0---31037881.0经过多次尝试,我得到了这个:DF = DF.set_index(['NOME', 'GRUPO_DFP', 'DS_CONTA','ORDEM_EXER'], append=True)DF.unstack() 不过,这不是我想要的。试图跳过第一行并只是取消堆叠,返回错误:ValueError:索引包含重复条目,无法重塑所以,我真的不知道我能做什么。
查看完整描述

4 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

像你这样的数据框:


df = pd.DataFrame([['PENÚLTIMO','Ativo Total','702571987.0'],

                  ['ÚLTIMO','Ativo Total','802819794.0'],

                  ['PENÚLTIMO','Caixa e Equivalentes de Caixa','31037881.0'],

                  ['ÚLTIMO','Caixa e Equivalentes de Caixa','25219700.0']], columns=['ORDEM_EXER','DS_CONTA','VL_CONTA'])

代表这个:


    ORDEM_EXER--DS_CONTA-----------------------VL_CONTA

0   PENÚLTIMO---Ativo Total--------------------702571987.0

1   ÚLTIMO------Ativo Total--------------------802819794.0

2   PENÚLTIMO---Caixa e Equivalentes de Caixa--31037881.0

3   ÚLTIMO------Caixa e Equivalentes de Caixa--25219700.0

尝试使用枢轴:


df.pivot(index='DS_CONTA',columns='ORDEM_EXER',values='VL_CONTA')

代表这个:


ORDEM_EXER-----PENÚLTIMO---------------------ÚLTIMO

DS_CONTA        

Ativo Total--------------------702571987.0---802819794.0

Caixa e Equivalentes de Caixa--31037881.0----25219700.0


查看完整回答
反对 回复 2023-05-23
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

您可以尝试使用pivot_table来实现 pandas 数据框的数据透视值。如果数据框是:


df

>>>

ORDEM_EXER  DS_CONTA    VL_CONTA

0   PENÚLTIMO   Ativo Total 702571987

1   ÚLTIMO  Ativo Total 802819794

2   PENÚLTIMO   Caixa e Equivalentes de Caixa   31037881

3   ÚLTIMO  Caixa e Equivalentes de Caixa   25219700

然后


table = pd.pivot_table(df, values='VL_CONTA', index=['DS_CONTA'], columns=['ORDEM_EXER'], aggfunc=np.sum)

//img4.sycdn.imooc.com/646c715a0001ec6506260253.jpg

查看完整回答
反对 回复 2023-05-23
?
侃侃无极

TA贡献2051条经验 获得超10个赞

首先,我们使用您的示例数据创建一个数据框:


from io import StringIO

import pandas as pd


data = '''ORDEM_EXER-----DS_CONTA-------------------------VL_CONTA

PENÚLTIMO-----Ativo Total-----------------------702571987.0

ÚLTIMO--------Ativo Total-----------------------802819794.0

PENÚLTIMO-----Caixa e Equivalentes de Caixa-----31037881.0

ÚLTIMO--------Caixa e Equivalentes de Caixa-----25219700.0

'''

df = pd.read_csv(StringIO(data), sep='-+', engine='python')


print(df)


  ORDEM_EXER                       DS_CONTA     VL_CONTA

0  PENÚLTIMO                    Ativo Total  702571987.0

1     ÚLTIMO                    Ativo Total  802819794.0

2  PENÚLTIMO  Caixa e Equivalentes de Caixa   31037881.0

3     ÚLTIMO  Caixa e Equivalentes de Caixa   25219700.0

现在我们使用数据透视表重新格式化和总结:


print(df.pivot_table(index='DS_CONTA',

                     columns='ORDEM_EXER',

                     values='VL_CONTA',

                     aggfunc=sum,

                     fill_value=0))



ORDEM_EXER                     PENÚLTIMO     ÚLTIMO

DS_CONTA                                           

Ativo Total                    702571987  802819794

Caixa e Equivalentes de Caixa   31037881   25219700


查看完整回答
反对 回复 2023-05-23
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

好的,如果我没理解错的话,你真的想为DS_CONTA设置索引

DF = DF.set_index(['DS_CONTA'])

那是对的吗?


查看完整回答
反对 回复 2023-05-23
  • 4 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信