首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas中以标记为熊猫数据头的XML数据的旋转

Pandas中以标记为熊猫数据头的XML数据的旋转
EN

Stack Overflow用户
提问于 2019-09-16 14:30:52
回答 2查看 134关注 0票数 2

我已经将XML数据转换为熊猫数据。现在,我希望将数据转到理想的df输出。请帮帮我。

我的电流:

代码语言:javascript
复制
       data                name
0      Aruba               Country or Area
1      Population, total   Item
2      1960                Year
3      54211               Value
4      Aruba               Country or Area
5      Population, total   Item
6      1961                Year
7      55438               Value
8      Aruba               Country or Area
9      Population, total   Item
10     1962                Year
11     56225               Value
12     Aruba               Country or Area
13     Population, total   Item
14     1963                Year
15     56695               Value
16     Aruba               Country or Area
17     Population, total   Item
18     1964                Year
19     57032               Value

我是直接粘贴最后一行,我所使用的枢轴。

代码语言:javascript
复制
xml_df = xml_df.pivot(index='data', columns='name')

净产出:

代码语言:javascript
复制
Country or Area   Year     Item                 Value
Aruba             1960     Population, total    54211
Aruba             1961     Population, total    55348

等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-16 14:42:29

你可以试试groupby on namecumcount,然后是unstack

代码语言:javascript
复制
df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']).unstack()
代码语言:javascript
复制
                data                                
name Country or Area               Item  Value  Year
k                                                   
0              Aruba  Population, total  54211  1960
1              Aruba  Population, total  55438  1961
2              Aruba  Population, total  56225  1962
3              Aruba  Population, total  56695  1963
4              Aruba  Population, total  57032  1964

详细信息:cumcount()

代码语言:javascript
复制
df.groupby('name').cumcount()

这个按名称和Numbers each item in each group from 0 to the length of that group - 1分组,并使用df.assign()将一个新的列k分配给dataframe。然后使用set_index()设置名称和k列作为索引,这样您就可以得到:

代码语言:javascript
复制
print(df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']))
                                data
k name                              
0 Country or Area              Aruba
  Item             Population, total
  Year                          1960
  Value                        54211
1 Country or Area              Aruba
  Item             Population, total
  Year                          1961
  Value                        55438
2 Country or Area              Aruba
  Item             Population, total
  Year                          1962
  Value                        56225
.......
.....

使用这些数据,我们使用unstack(),它帮助“数据透视一个级别(必然是分层的)索引标签,返回一个具有新级别列标签的DataFrame,其内部最高级的列标签由旋转索引标签组成”因此,这将索引的最后一层(默认情况下)转换为我们需要的列。

票数 1
EN

Stack Overflow用户

发布于 2019-09-16 15:20:25

另一种使用枢轴的方法:

代码语言:javascript
复制
df['idx'] = df.name.eq('Country or Area').cumsum()
df.pivot(index='idx', columns='name', values='data')

输出:

代码语言:javascript
复制
name Country or Area               Item  Value  Year
idx                                                 
1              Aruba  Population, total  54211  1960
2              Aruba  Population, total  55438  1961
3              Aruba  Population, total  56225  1962
4              Aruba  Population, total  56695  1963
5              Aruba  Population, total  57032  1964
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57959030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档