2017-03-17 92 views
1

另一列的最大值下降对齐行我有一个名为auDataFrame从中我要删除的行,其中date与观测哪里bal==bal.max()对齐。例如,如果bal==bal.max()2009-08-01关联,那么我想删除其中的所有其他观察值date=='2009-08-01'。下面是我做过尝试,但都尝试导致ValueError: Series lengths must match to compare其中date与大熊猫

au = au[au.date != au.date[au.bal==au.bal.max()]] 
au = au[au.date != au.date[au.bal==au.bal.max()].values] 

回答

3

使用idxmax和@ jezrael的设置

设置

au = pd.DataFrame({'bal':[1,2,3,4], 
        'date':['2009-08-01','2009-08-01','2009-08-02', '2009-08-02'], 
        'C':[7,8,9,1]}) 

解决方案

dmax = au.date.loc[au.bal.idxmax()] 
au[au.date != dmax] 

    C bal  date 
0 7 1 2009-08-01 
1 8 2 2009-08-01 
2

我想你需要从一个项目Series通过itemvalues与[0]选择firts价值得到标:

au = pd.DataFrame({'bal':[1,2,3,4], 
        'date':['2009-08-01','2009-08-01','2009-08-02', '2009-08-02'], 
        'C':[7,8,9,1]}) 

print (au) 
    C bal  date 
0 7 1 2009-08-01 
1 8 2 2009-08-01 
2 9 3 2009-08-02 
3 1 4 2009-08-02 


print (au[au.date != au.loc[au.bal==au.bal.max(), 'date'].item()]) 
    C bal  date 
0 7 1 2009-08-01 
1 8 2 2009-08-01 

idxmax解决方案 - 与date首先创建Series

print (au.set_index('date').bal.idxmax()) 
2009-08-02 

au = au[au.date != au.set_index('date').bal.idxmax()] 
print (au) 
    C bal  date 
0 7 1 2009-08-01 
1 8 2 2009-08-01