2

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

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' object has no attribute 'view'' 结尾的错误。

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

在此处输入图像描述

编辑 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)

提前致谢。

4

2 回答 2

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
于 2013-10-20T15:39:29.753 回答
0

编辑:当我尝试使用 .reset_index() 时,我得到以 'AttributeError: 'str' object has no attribute 'view'' 结尾的错误。

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

我认为 pandas 不喜欢在此处重置索引(),因为您尝试将字符串索引重置为仅包含日期的列。如果您只有日期作为列,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'

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

于 2014-06-27T09:35:29.413 回答