重新索引

Series索引处理

pandas的reindex方法可以创建一个适应新索引的新对象。

obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj

d    4.5
b    7.2
a   -5.3
c    3.6
dtype: float64

调用Series的reindex会根据局新索引进行重排,当某个索引值不存在时,引入缺失值

obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2

a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64

对于时间序列的有序数据,重新索引需要做一些插值处理。

obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)

a   -5.3
b    7.2
c    3.6
d    4.5
e    0.0
dtype: float64

常用的插值方式有:前向(ffill或pad)、后向(bfill或backfill)

DataFrame索引处理

对于DataFrame,reindex可以修改(行)索引、列,或两个都修改。

frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
                  columns=['Ohio', 'Texas', 'California'])
frame

如果仅传入一个序列,则会重新索引行

frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2

    Ohio    Texas    California
a    0.0    1.0    2.0
b    NaN    NaN    NaN
c    3.0    4.0    5.0
d    6.0    7.0    8.0

使用columns关键字可以重新索引列

states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)

    Texas    Utah    California
a    1    NaN    2
c    4    NaN    5
d    7    NaN    8

同时对行和列重新索引,而插值只能按行应用

frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',
              columns=states)

Texas    Utah    California
a    1    NaN    2
b    1    NaN    2
c    4    NaN    5
d    7    NaN    8

使用ix重新索引

frame.ix[['a', 'b', 'c', 'd'], states]

重复索引

带有重复索引值的Series

obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])

索引的is_unique属性可以查看索引值是否唯一

obj.index.is_unique

对Series来说,如果索引对应多个值,则返回Series

obj['a']

a    0
a    1
dtype: int64

对DataFrame的行索引也是如此

df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])
df.ix['b']

        0            1            2
b    1.669025    -0.438570    -0.539741
b    0.476985    3.248944    -1.021228

results matching ""

    No results matching ""