堆栈数据框(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)的主要内容,如果未能解决你的问题,请参考以下文章