如何解决如何在python中反转多索引数据透视表
我有一个数据框,可以将其转换为数据透视表,对缺失的数据执行一些估算,然后将其转换回原始形式。我似乎可以正常工作的代码不会产生错误,但是输出不会产生预期的行数。我怀疑问题与指定熔化/堆叠有关,但还不太清楚。如果有人能够提供一些帮助/支持,我将不胜感激。图片,代码和更多信息如下。
在此先感谢所有提供帮助的人。
初始数据帧(数据)包含4列(地理代码/国家/地区,变量名称,年份和值)。有290,038行x 4列。
我将data
转换为以下格式(每行中的国家/地区年份对,每列都是变量)。使用以下代码
data_temp = data.copy()
data_temp_grouped = pd.pivot_table(data_temp,index=(['geocode','year']),columns="variablename",values="value")
执行一些操作/输入后,我想将data_temp_grouped
转换回原始格式为data
。我尝试了几种不同的方法,代码未产生预期的行数(290,038)。
这将产生4列,但有827,929行。
data_temp_grouped2 = data_temp_grouped.copy()
data_temp_grouped3 = data_temp_grouped2.stack(0).reset_index(name='value')
这将产生111,5712行x 4列
data_temp_grouped2 = data_temp_grouped2.copy()
data_temp_grouped4 = data_temp_grouped4.reset_index()
data_temp_grouped4 = pd.melt(data_temp_grouped4,id_vars=["geocode","year"])
data_temp_grouped4
解决方法
TLDR:我无法解释宽幅格式中“丢失”的数据,而该数据已“添加”到长格式中。
我刚刚意识到为什么会有这些问题。在最初的长格式中,共有290,000行。转换为宽格式时,有7748(行)x144(列)。将其压缩为长格式后,总共有1,115,712行(7748 x 144)。出现这种增加的原因是,在初始数据中不存在缺少的数据(某些变量的年份/年份对),而在转换为宽格式时仅“出现”了。从长到宽再次恢复尺寸匹配:7748 x 144,符合预期。
对于其他可能遇到相同问题的人,我也在下面提供了我的代码。 代码在下面
# grouping country year pairs
data_temp = data.copy()
# converts into multi indexed wide format (country year pairs)
data_temp_grouped = pd.pivot_table(data_temp,index=(['geocode','year']),columns="variablename",values="value")
# linearly interpolates the data for each country year pair
data_temp_grouped=data_temp_grouped.groupby("geocode").apply(lambda x : x.interpolate(method="linear",limit_direction="both"))
# Make a copy of the dataframe
data_temp_grouped2 = data_temp_grouped.copy()
# reset the index
data_temp_grouped2=data_temp_grouped2.reset_index()
data_temp_grouped2_melted=pd.melt(data_temp_grouped2,id_vars=['geocode',"year"],var_name='variablename',value_name='value')
data_temp_grouped2_melted
# to double check and convert back to multi index wide format
data_temp_grouped_check = pd.pivot_table(data_temp_grouped2_melted,values="value")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。