使用pandas中其他两个列的值从分类变量中创建列

2024-09-25 00:21:07 发布

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

原始数据帧

enter image description here

我希望它变成以下结构:

Area   |Ind3_2016|Ind6_2016|...|Ind12_2016|Ind3_2017|Ind6_2017|...| Ind12_2017
-------|---------|---------|---|----------|---------|---------|---|-----------
Alabama| 2306    | 2270    |...| 35621    | 2409    | 3391    |...| 36397  

在IndCode列中创建2016年和2017年的每个唯一值的列,并将2016年和2017年的值放在这些列下。在


Tags: 原始数据area结构alabamaind3ind6ind12indcode
1条回答
网友
1楼 · 发布于 2024-09-25 00:21:07

您可以执行两个单独的轴,然后连接结果,或者预先进行一些堆叠,只做一个轴。在

样本数据

import pandas as pd
df = pd.DataFrame({'Area': ['A', 'A','A','A','A'],
                   'IndCode': [3, 6, 10, 11, 12],
                   'Industry': ['blah', 'foo', 'bar', 'baz', 'boo'],
                   '2016': [2306, 2270, 5513, 7730, 35621],
                   '2017': [2409, 3391, 5438, 7890, 36397]  
})

两个支点+Concat

^{pr2}$

输出:

IndCode  Ind10_2016  Ind11_2016  Ind12_2016  Ind3_2016  Ind6_2016  Ind10_2017  Ind11_2017  Ind12_2017  Ind3_2017  Ind6_2017
Area                                                                                                                       
A              5513        7730       35621       2306       2270        5438        7890       36397       2409       3391

轴前堆叠

df2 = df.set_index(['Area', 'IndCode'])[['2016', '2017']].stack().reset_index()
pd.pivot_table(df2, index='Area', 
               columns='Ind'+df2.IndCode.astype('str')+'_'+df2.level_2.astype(str), 
               values=0).reset_index()

输出:

  Area  Ind10_2016  Ind10_2017  Ind11_2016  Ind11_2017  Ind12_2016  Ind12_2017  Ind3_2016  Ind3_2017  Ind6_2016  Ind6_2017
0    A        5513        5438        7730        7890       35621       36397       2306       2409       2270       3391

相关问题 更多 >