将功能限制为唯一日期 - 多指数

时间:2012-09-20 20:50:23

标签: python dataframe pandas

我在csv列中列出了日期和时间。我正在尝试在每个唯一的日期执行一个函数 - 每次与该日期相关联。该函数应该在每个新日期的第一次(930am)开始。每个日期重复42次。有62,035行。我说:

我的问题:下面的'for'循环这样的循环会在逻辑上实现吗? I.E.,在该日期的所有时间的每个新日期“做某事”。然后转到下一个日期......

data=read_csv(file)  
idf= data.set_index(['date', 'time'])  
for ((date, time), data) in idf:
# (I also tried - for (i in idf):)

 --do something here--

现在,我得到了IndexError:'列表索引超出范围'。
有任何想法可能会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

In [1]: df = pd.DataFrame({'duty': {('11/12/2012', '10:00'): 0, ('12/12/2012', '10:00'): 0, ('12/12/2012', '11:00'): 1}, 'prices': {('11/12/2012', '10:00'): 1, ('12/12/2012', '10:00'): 2, ('12/12/2012', '11:00'): 3}})

In [2]: df.index = pd.MultiIndex.from_tuples(df1.index)

In [3]: df
Out[3]: 
                  duty  prices
11/12/2012 10:00     0       1
12/12/2012 10:00     0       2
           11:00     1       3

In [4]: g = df.groupby(level=0)

您可以执行一些标准的groupby操作,或使用transformationaggregation编写自己的操作:

In [5]: g.sum()
Out[5]: 
            duty  prices
11/12/2012     0       1
12/12/2012     1       5

In [6]: g.transform(lambda x: x - x.mean())
Out[6]: 
                  duty  prices
11/12/2012 10:00   0.0     0.0
12/12/2012 10:00  -0.5    -0.5
           11:00   0.5     0.5

In [7]: g.agg({'prices': np.mean, 'duty': len})
Out[7]: 
            duty  prices
11/12/2012     1     1.0
12/12/2012     2     2.5

the docs中有更多示例。