亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用重復條目取消堆疊 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)

http://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 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號