问题描述
它具有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_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()
还是,这不是我想要的。 尝试跳过第一行并仅进行堆叠,将返回错误:
ValueError:索引包含重复的条目,无法重塑
所以,我真的无能为力。
解决方法
好吧,如果我理解正确,那么您真的只想为 DS_CONTA
设置索引DF = DF.set_index(['DS_CONTA'])
对吗?
,像您一样的数据框:
df = pd.DataFrame([['PENÚLTIMO','Ativo Total','702571987.0'],['ÚLTIMO','802819794.0'],['PENÚLTIMO','Caixa e Equivalentes de Caixa','31037881.0'],'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
,
您可以尝试使用pivot_table来获得熊猫数据框的枢轴值。 如果数据框是:
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)
,
首先,我们使用您的示例数据创建一个数据框:
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',aggfunc=sum,fill_value=0))
ORDEM_EXER PENÚLTIMO ÚLTIMO
DS_CONTA
Ativo Total 702571987 802819794
Caixa e Equivalentes de Caixa 31037881 25219700