pandas .12工作但.13在df.index传递一个系列时有错误

时间:2014-02-27 23:02:43

标签: python pandas

为什么这个代码在版本pandas .13中不起作用?这是一个错误还是我需要以不同的方式做事?

previous=0
for i, r in df.iterrows():
    if i in df.index[df.groupby(['case']).apply(lambda x: x['change'].idxmin())]:
      print 'anything'

我找不到任何显示原因的文档。

进行测试

import pandas as pd
import datetime as DT
d = {'case' : pd.Series([1,1,1,1,2]),
'open' : pd.Series([DT.datetime(2014, 3, 2), DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2)]),
'change' : pd.Series([DT.datetime(2014, 3, 8), DT.datetime(2014, 4, 8),DT.datetime(2014, 5, 8),DT.datetime(2014, 6, 8),DT.datetime(2014, 6, 8)]),
'StartEvent' : pd.Series(['Homeless','Homeless','Homeless','Homeless','Jail']),
'ChangeEvent' : pd.Series(['Homeless','irrelivant','Homeless','Jail','Jail']),
'close' : pd.Series([DT.datetime(2015, 3, 2), DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2)])}
df=pd.DataFrame(d)

1 个答案:

答案 0 :(得分:1)

这样做很奇怪,你期望结果是什么?

如果您真的想要这样做,请使用该值。 Series不是df.index的有效索引器(只有数组)。这个“工作”在0.12,但恰好依赖于一个系列是一个ndarray子类的事实。

df.index[df.groupby(['case']).apply(lambda x: x['change'].idxmin()).values]
Int64Index([0, 4], dtype='int64')