使用重复条目取消堆叠 DF

我是熊猫的新手,我有一个数据集,我想更改它的说明。

http://img2.mukewang.com/646c712100011abb10850351.jpg

它有 40.000 行和 13 列,包含 2010 年 ('Último') 和 2009 年 ('PENÚLTIMO') 的财务信息

我感兴趣的部分是:'NOME'(公司名称),'GRUPO_DFP'(目前它只是资产负债表,但我打算添加更多),'ORDEM_EXER'(当前或去年,2010 年或 2009 年) , 'DS_CONTA'(资产类型),'VL_CONTA'(价值)

顺便说一句,这都是公开信息。

所以,删除我不想要的列,我得到这个:

http://img.mukewang.com/646c712d0001443c08220193.jpg

问题从这里开始。


它像普通的 csv 一样显示信息:


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

但我想要的是:


                  ÚLTIMO      PENÚLTIMO

 DS_CONTA

Ativo Total ----802819794.0--702571987.0

Caixa e Eq..----25219700.0---31037881.0

经过多次尝试,我得到了这个:


DF = DF.set_index(['NOME', 'GRUPO_DFP', 'DS_CONTA','ORDEM_EXER'], append=True)

DF.unstack() 

http://img.mukewang.com/646c713a0001d9b406540360.jpg

不过,这不是我想要的。试图跳过第一行并只是取消堆叠,返回错误:

ValueError:索引包含重复条目,无法重塑

所以,我真的不知道我能做什么。


MMTTMM
浏览 109回答 4
4回答

有只小跳蛙

像你这样的数据框: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_CONTA0   PENÚLTIMO---Ativo Total--------------------702571987.01   ÚLTIMO------Ativo Total--------------------802819794.02   PENÚLTIMO---Caixa e Equivalentes de Caixa--31037881.03   ÚLTIMO------Caixa e Equivalentes de Caixa--25219700.0尝试使用枢轴:df.pivot(index='DS_CONTA',columns='ORDEM_EXER',values='VL_CONTA')代表这个:ORDEM_EXER-----PENÚLTIMO---------------------ÚLTIMODS_CONTA        Ativo Total--------------------702571987.0---802819794.0Caixa e Equivalentes de Caixa--31037881.0----25219700.0

拉莫斯之舞

您可以尝试使用pivot_table来实现 pandas 数据框的数据透视值。如果数据框是:df>>>ORDEM_EXER  DS_CONTA    VL_CONTA0   PENÚLTIMO   Ativo Total 7025719871   ÚLTIMO  Ativo Total 8028197942   PENÚLTIMO   Caixa e Equivalentes de Caixa   310378813   ÚLTIMO  Caixa e Equivalentes de Caixa   25219700然后table = pd.pivot_table(df, values='VL_CONTA', index=['DS_CONTA'], columns=['ORDEM_EXER'], aggfunc=np.sum)

侃侃无极

首先,我们使用您的示例数据创建一个数据框:from io import StringIOimport pandas as pddata = '''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'''df = pd.read_csv(StringIO(data), sep='-+', engine='python')print(df)  ORDEM_EXER                       DS_CONTA     VL_CONTA0  PENÚLTIMO                    Ativo Total  702571987.01     ÚLTIMO                    Ativo Total  802819794.02  PENÚLTIMO  Caixa e Equivalentes de Caixa   31037881.03     Ú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     ÚLTIMODS_CONTA                                           Ativo Total                    702571987  802819794Caixa e Equivalentes de Caixa   31037881   25219700

慕桂英546537

好的,如果我没理解错的话,你真的想为DS_CONTA设置索引DF = DF.set_index(['DS_CONTA'])那是对的吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python