借助Pandas删除数组错误值,保留重复时间t对应的最大位移x
实现方案
Pandas 方案(推荐,你已经用Pandas导入了数据,直接用原生接口最优)
有两种常用实现,适配不同场景:
- 仅需要保留
t和对应最大x两列:用groupby直接聚合取最大值
import pandas as pd # 你的原始导入数据df示例: # df = pd.DataFrame({'t': [1,2,3,4,5,3,1,7], 'x': [2,3,4,5,5,3,1,5]}) # 按t分组取x的最大值 res = df.groupby('t', as_index=False)['x'].max()
- 需要保留x最大值所在行的其他字段(如果你的数据除了t、x还有别的列):先排序再去重
# 按t升序、x降序排序,保证每个t的第一条就是x最大的行 df_sorted = df.sort_values(by=['t', 'x'], ascending=[True, False]) # 按t去重,保留第一条 res = df_sorted.drop_duplicates(subset='t', keep='first')
二维数组(Numpy)方案
如果你已经把数据转成了纯numpy二维数组,可以用如下方法实现:
import numpy as np # 示例数组,第一列为t,第二列为x # arr = np.array([[1,2],[2,3],[3,4],[4,5],[5,5],[3,3],[1,1],[7,5]]) # 按t升序、x降序排序 sorted_arr = arr[np.lexsort((-arr[:,1], arr[:,0]))] # 提取每个t第一次出现的索引(对应x最大的行) _, unique_idx = np.unique(sorted_arr[:,0], return_index=True) res_arr = sorted_arr[unique_idx]
结果验证
你的示例数据运行后输出如下,符合要求:
| t | x |
|---|---|
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 5 |
| 7 | 5 |
内容的提问来源于stack exchange,提问作者Ali AlCapone
相关产品推荐
相关产品推荐

