3 回答
TA贡献1841条经验 获得超3个赞
您必须检查两个条件才能保持一行:
相对于每组第一名的差异大于
0.5
该行不是组中的第一行
为此,您可以定义这两个条件并用 a 链接它们bitwise OR
:
m1 = df.Distance.sub(df.groupby('Date').Distance.transform('first')).abs().gt(.5)
m2 = ~df.Date.duplicated()
df[m1|m2]
Date Distance
0 2014-08-13 5.9
1 2014-08-17 10.7
3 2014-08-20 13.7
4 2014-08-13 8.8
TA贡献1815条经验 获得超10个赞
我找到了使用这种方法的方法,但看起来有点乱
df = df.sort_values(['Date','Distance'])
df['Date_s'] = df['Date'].shift(+1)
df['Distance_s'] = df['Distance'].shift(+1)
def remove_near_duplicate(distance,distance_s,date,date_s):
if (date == date_s) & (abs(distance-distance_s)<0.5):
return False
else:
return True
df['To_drop'] = df.apply(lambda row : remove_near_duplicate(row['Distance'],row['Distance_s'],row['Date'],row['Date_s']),axis=1)
df = df[df['To_drop']==True]
df.drop(columns=['To_drop','Date_s','Distance_s'],inplace=True)
TA贡献1898条经验 获得超8个赞
你可以做这个简单的事情:
GroupBy 在
Date
列上。这将迎合重复的日期。获取
diff
组内的所有行。选择
diff
大于Nan
或等于的行0.5
命令:
In [43]: df['diff'] = df.groupby('Date')['Distance'].diff()
In [47]: df[(df['diff'].isna()) | df['diff'].ge(0.5)].drop('diff', 1)
Out[47]:
Date Distance
0 2014-08-13 5.9
1 2014-08-17 10.7
3 2014-08-20 13.7
4 2014-08-13 8.8
添加回答
举报