首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据索引

熊猫数据索引
EN

Stack Overflow用户
提问于 2016-03-02 10:03:23
回答 2查看 2.8K关注 0票数 1

我有一个相当大的数据,列名类别(对外贸易统计),而索引是一个字符串,包含国家代码和年份: w2013意思是世界,2013年,r2015的意思是俄罗斯联邦,2015年。

代码语言:javascript
复制
Index([u'w2011', u'c2011', u'g2011', u'i2011', u'r2011', u'w2012', u'c2012',
   u'g2012', u'i2012', u'r2012', u'w2013', u'c2013', u'g2013', u'i2013',
   u'r2013', u'w2014', u'c2014', u'g2014', u'i2014', u'r2014', u'w2015',
   u'c2015', u'g2015', u'i2015', u'r2015'],
  dtype='object')

什么是最简单的方法来制定一个多个指数来绘制不同的列-我需要一个列为每个国家和每年?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-02 10:12:53

您可以尝试创建Multiindex from_tuples -对于提取字母使用用str索引

代码语言:javascript
复制
import pandas as pd

li =[u'w2011', u'c2011', u'g2011', u'i2011', u'r2011', u'w2012', u'c2012',
   u'g2012', u'i2012', u'r2012', u'w2013', u'c2013', u'g2013', u'i2013',
   u'r2013', u'w2014', u'c2014', u'g2014', u'i2014', u'r2014', u'w2015',
   u'c2015', u'g2015', u'i2015', u'r2015']

df = pd.DataFrame(range(25), index = li, columns=['a'])
print df
        a
w2011   0
c2011   1
g2011   2
i2011   3
r2011   4
w2012   5
c2012   6
g2012   7
i2012   8
r2012   9
w2013  10
c2013  11
g2013  12
i2013  13
r2013  14
w2014  15
c2014  16
g2014  17
i2014  18
r2014  19
w2015  20
c2015  21
g2015  22
i2015  23
r2015  24
代码语言:javascript
复制
print df.index.str[0]
Index([u'w', u'c', u'g', u'i', u'r', u'w', u'c', u'g', u'i', u'r', u'w', u'c',
       u'g', u'i', u'r', u'w', u'c', u'g', u'i', u'r', u'w', u'c', u'g', u'i',
       u'r'],
      dtype='object')

print df.index.str[1:]
Index([u'2011', u'2011', u'2011', u'2011', u'2011', u'2012', u'2012', u'2012',
       u'2012', u'2012', u'2013', u'2013', u'2013', u'2013', u'2013', u'2014',
       u'2014', u'2014', u'2014', u'2014', u'2015', u'2015', u'2015', u'2015',
       u'2015'],
      dtype='object')

df.index = pd.MultiIndex.from_tuples(zip(df.index.str[0], df.index.str[1:]))
代码语言:javascript
复制
print df
         a
w 2011   0
c 2011   1
g 2011   2
i 2011   3
r 2011   4
w 2012   5
c 2012   6
g 2012   7
i 2012   8
r 2012   9
w 2013  10
c 2013  11
g 2013  12
i 2013  13
r 2013  14
w 2014  15
c 2014  16
g 2014  17
i 2014  18
r 2014  19
w 2015  20
c 2015  21
g 2015  22
i 2015  23
r 2015  24

如果需要将years转换为int,请使用astype

代码语言:javascript
复制
df.index = pd.MultiIndex.from_tuples(zip(df.index.str[0], df.index.str[1:].astype(int)))

print df.index
MultiIndex(levels=[[u'c', u'g', u'i', u'r', u'w'], [2011, 2012, 2013, 2014, 2015]],
           labels=[[4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4]])
票数 2
EN

Stack Overflow用户

发布于 2016-03-02 10:13:01

如果我理解得很好,你可以:

  1. 重置索引 df.reset_index(inplace=1)
  2. 创建另外两列,一列用于年度,另一列用于国家: df.loc,“年份”= df.foo.apply(lambda : x1:) df.loc,"country“= df.foo.apply(lambda : x)

假设您的前一个索引的列名为foo,并且国家代码的长度为1,则可以进行调整。

  1. 将这两列设置为索引: Df.set_index(“年份”,“国家”,inplace=1)

HTH

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35743941

复制
相关文章

相似问题

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