摆脱Pandas中的层次索引

时间:2013-10-20 13:48:18

标签: python pandas

我刚刚转动了一个数据框来创建下面的数据框:

date       2012-10-31   2012-11-30
term        
red       -4.043862     -0.709225   
blue      -18.046630     -8.137812
green     -8.339924      -6.358016

列应该是日期,最左边的列应该包含字符串。

我希望能够遍历行(使用.apply())并比较每个日期列下的值。我遇到的问题是我认为df具有分层索引。

有没有办法给整个df一个新的索引(例如1,2,3等),然后有一个平坦的索引(但没有摆脱第一列中的术语)?

编辑:当我尝试使用.reset_index()时,我得到以'AttributeError结尾的错误:'str'对象没有属性'view''。

编辑2:这就是df的样子:

enter image description here

编辑3:这是df的描述:

<class 'pandas.core.frame.DataFrame'>
Index: 14597 entries, 101016j to zymogens
Data columns (total 6 columns):
2012-10-31 00:00:00    14597  non-null values
2012-11-30 00:00:00    14597  non-null values
2012-12-31 00:00:00    14597  non-null values
2013-01-31 00:00:00    14597  non-null values
2013-02-28 00:00:00    14597  non-null values
2013-03-31 00:00:00    14597  non-null values
dtypes: float64(6)

提前致谢。

2 个答案:

答案 0 :(得分:2)

df= df.reset_index()

这将获取当前索引并使其成为一列,然后从0开始给你一个新的索引

添加示例:

import pandas as pd
import numpy as np
df = pd.DataFrame({'2012-10-31': [-4, -18, -18], '2012-11-30': [-0.7, -8, -6]}, index = ['red', 'blue','green'])

df
    2012-10-31  2012-11-30
red      -4     -0.7
blue    -18     -8.0
green   -18     -6.0

df.reset_index()
    term    2012-10-31  2012-11-30
0    red     -4         -0.7
1    blue   -18         -8.0
2    green  -18         -6.0

答案 1 :(得分:0)

  

编辑:当我尝试使用.reset_index()时,我得到的结果为&#39;属性错误:&#39; str&#39;对象没有属性&#39; view&#39;&#39;。

首先尝试将日期列转换为字符串类型列。

我认为pandas不喜欢reset_index(),因为您尝试将字符串索引重置为仅包含日期的列。如果您只将日期作为列,则pandas将在内部将这些列作为DateTimeIndex处理。调用reset_index()时,pandas会尝试将字符串索引设置为日期列的另一列,并以某种方式失败。对我来说看起来像个错误,但不确定。

示例:

t = pandas.DataFrame({pandas.to_datetime('2011') : [1,2], pandas.to_datetime('2012') :  [3,4]}, index=['A', 'B'])
t

2011-01-01 00:00:00     2012-01-01 00:00:00
A   1   3
B   2   4

t.columns
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-01 00:00:00, 2012-01-01 00:00:00]
Length: 2, Freq: None, Timezone: None

t.reset_index()
...
AttributeError: 'str' object has no attribute 'view'

如果您尝试使用字符串列,它将起作用。