我有一个名为DataFrame
的{{1}},我想从中删除au
与date
的观察对齐的行。例如,如果bal==bal.max()
与bal==bal.max()
相关联,那么我想删除2009-08-01
的所有其他观察结果。以下是我尝试过但两次尝试都会导致date=='2009-08-01'
ValueError: Series lengths must match to compare
答案 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}}或Series
从values
的{{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