使用重复条目取消堆栈DF

2024-06-25 06:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的熊猫,我有一个数据集,我想改变它的解释

Data set

它有40000行13列,有2010年和2009年的财务信息

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

顺便说一下,这些都是公开信息

因此,删除我不想要的列,我得到:

Data set, dropped columns

问题从这里开始

它像普通的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() 

result

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

ValueError: Index contains duplicate entries, cannot reshape

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


Tags: 信息dfds资产totalnomepencaixa
3条回答

您可以尝试使用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)

enter image description here

像您这样的数据帧:

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

尝试使用pivot:

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

好的,如果我理解正确的话,您真的想为DS\u CONTA设置索引

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

对吗

相关问题 更多 >