删除日期与pandas中另一列的最大值对齐的行

时间:2017-03-17 19:47:19

标签: python pandas

我有一个名为DataFrame的{​​{1}},我想从中删除audate的观察对齐的行。例如,如果bal==bal.max()bal==bal.max()相关联,那么我想删除2009-08-01的所有其他观察结果。以下是我尝试过但两次尝试都会导致date=='2009-08-01'

ValueError: Series lengths must match to compare

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我认为您需要通过[{3}}或Seriesvalues的{​​{1}}项获取标量,并选择[0]选择的第一个值:

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

使用item的解决方案 - 首先使用Series创建date

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