为什么这个代码在版本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)
答案 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')