堆栈数据框(python)

Posted

技术标签:

【中文标题】堆栈数据框(python)【英文标题】:Stack dataframe (python) 【发布时间】:2020-10-09 10:43:00 【问题描述】:

我正在尝试通过使用函数stack() 在 python 中堆叠一个数据帧,但有些东西不能正常工作。

我的数据框具有以下结构:

>              BE       BG       CZ      ...
> AT_CPA_A02   0.0706   0        0.3879  ... 
> BE_CPA_A02   38.8601  0.0001   0.0233  ...      
> BG_CPA_A02   0        95.2664  0.      ...
>     ...        ...      ...      ...

而我正在寻找的是:

>              Country Val.
> AT_CPA_A02   BE      0.0706   
> AT_CPA_A02   BG      0
> AT_CPA_A02   CZ      0.3879
> ...
> BE_CPA_A02   BE      38.8601   
> BE_CPA_A02   BG      0.0001
> BE_CPA_A02   CZ      0.0233 
> ...     

尽管如此,在df = df.stack() 中使用函数stack() 时,结果是:

>              Country BE.      BG.     CZ
> AT_CPA_A02   BE      0.0706   NA.     NA.
>              BG      NA.      0.      NA.
>              CZ      NA.      NA.     0.3879.   
> ...
> BE_CPA_A02.  BE.     38.8601  NA.     NA. 
>              BG.     NA.      0.0001  NA
>              CZ.     NA.      NA.     0.0233
> ... 

在将函数与一些示例数据一起使用时,它可以完美地工作......

有人可以帮我吗?非常感谢提前

【问题讨论】:

@wwnde 还是我回答了你的问题?请点击解决方案旁边的复选标记,接受您认为的最佳答案。 不幸的是没有...没有一个答案解决了问题...我可以在解释我的数据集时做一些更明确的事情吗? (如上传数据框) 【参考方案1】:

一种选择是使用.melt。我这样做的方式是,您必须先重置索引,然后再将其重新设置:

df = df.reset_index().melt(id_vars='index', var_name='Country', value_name='Val.').set_index('index')
df
Out[1]: 
           Country     Val.
index                      
AT_CPA_A02      BE   0.0706
BE_CPA_A02      BE  38.8601
BG_CPA_A02      BE   0.0000
AT_CPA_A02      BG   0.0000
BE_CPA_A02      BG   0.0001
BG_CPA_A02      BG  95.2664
AT_CPA_A02      CZ   0.3879
BE_CPA_A02      CZ   0.0233
BG_CPA_A02      CZ   0.0000

【讨论】:

【参考方案2】:

你在正确的轨道上。请尝试:

df.stack().reset_index(level=1).rename(columns='level_1':'Country',0:'Val' )



            Country      Val
AT_CPA_A02      BE   0.0706
AT_CPA_A02      BG   0.0000
AT_CPA_A02      CZ   0.3879
BE_CPA_A02      BE  38.8601
BE_CPA_A02      BG   0.0001
BE_CPA_A02      CZ   0.0233
BG_CPA_A02      BE   0.0000
BG_CPA_A02      BG  95.2664
BG_CPA_A02      CZ   0.0000

【讨论】:

以上是关于堆栈数据框(python)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框重新排列堆栈到两个值列(用于因子图)

万能的list列表,python中的堆栈队列实现全靠它!

万能的list列表,python中的堆栈队列实现全靠它!

在堆栈面板中拉伸文本块和文本框

python-把列表当堆栈,队列使用

python列表实现堆栈和队列