python - Pandas 获取行的最小值并存储相应的索引
问题描述
我有一个存储为熊猫数据框的距离矩阵,df
其中包含以公里为单位的 400 对坐标之间的距离,如下所示:
0 1 2 3 4 ....
0 0.000000 1.740838 2.496827 2.577736 1.698938
1 1.740838 0.000000 1.373490 1.741935 1.261969
2 2.496827 1.373490 0.000000 0.420828 0.812797
3 2.577736 1.741935 0.420828 0.000000 1.131974
4 1.698938 1.261969 0.812797 1.131974 0.000000
.
.
.
我对每个点的下一个最近坐标有多接近感兴趣,我得到了:
df[df > 0].min(axis=1)
0 0.074083
1 0.004708
2 0.119431
3 0.167242
4 0.018095
它给出了到下一个最近点的距离(以 KM 为单位)。我还想存储下一个最近点的索引,这样我就有:
nearest_dist nearest_id
0 0.074083 3
1 0.004708 151
2 0.119431 7
3 0.167242 4
4 0.018095 81
解决方案
stack
然后groupby
+idxmin
对系列进行切片。
s = df.rename_axis(columns='nearest_id').stack().loc[lambda x: x > 0]
s = (s.loc[s.groupby(level=0).idxmin()]
.to_frame('nearest_dist')
.reset_index(-1))
nearest_id nearest_dist
0 4 1.698938
1 4 1.261969
2 3 0.420828
3 2 0.420828
4 2 0.812797
也可以从 numpy 构建 DataFrame。
arr = df.where(df > 0).to_numpy()
pd.DataFrame({'nearest_id': np.nanargmin(arr, 1),
'nearest_dist': np.nanmin(arr, 1)},
index=df.index)
推荐阅读
- amazon-ec2 - 在 Ubuntu 18.04 上启动 google-chrome-stable 时出现分段错误
- rundeck - rundeck 问题 - 启用活动自动刷新 - 默认情况下禁用
- amazon-web-services - AWS:STS Assume Role 不适用于用户
- javascript - 使用 Knex.js 批量插入错误:绑定消息提供 X 参数,但准备好的语句“”需要 Y
- mysql - 如何优化以下 SELECT 查询
- python - 在函数列表中选择和执行函数
- common-lisp - 为什么斐波那契数列的结果在一定数量后开始发散?
- javascript - 如何从字符串中提取字符但仅在看到某个短语之后?
- python - 如何从非单词字符中清除 csv 文件并在 python 中删除包含它们的单词?
- python - 如何使用 Tensorflow Estimator 将具有权重的模型保存到单个 protobuf 文件中?