python - 导出 pandas 数据框中的最小值及其各自的列推导
问题描述
我有一个数据框:
data = np.array([[10,50,75,'test1','test2','test3'],
[1000,500,175,'test1','test2','test3'],
[500,50,750,'test1','test2','test3'],
[1,500,5,'test1','test2','test3'],
[50,500,15,'test1','test2','test3']])
df = pd.DataFrame(data, columns = ['distance_1', 'distance_2','distance_3', 'distance_1_rep', 'distance_2_rep', 'distance_3_rep'])
df.distance_1 = df.distance_1.astype('int64')
df.distance_2 = df.distance_2.astype('int64')
df.distance_3 = df.distance_3.astype('int64')
我正在使用 distance_1,2,3 列之间找到最小距离
df['min_distance'] = df[['distance_1','distance_2','distance_3']].min(axis=1)
现在我想推导出另一列:
它给出了与 distance_1、distance_2、distance_3 的最小值相对应的 distance_1_rep 或 distance_2_rep 或 distance_3_rep 值
对于输出,值应该是
[test1,test3,test2,test1,test3]
我将如何得出它?
解决方案
这本质上是一个lookup
问题,我们首先选择列,然后使用alongdistance
找到最小值的索引,然后使用这些索引在相应的类似列中查找值argmin
axis=1
_rep
c = df.filter(regex='distance_\d+$')
df['new_col'] = df[c.columns + '_rep'].values[df.index, c.values.argmin(1)]
distance_1 distance_2 distance_3 distance_1_rep distance_2_rep distance_3_rep new_col
0 10 50 75 test1 test2 test3 test1
1 1000 500 175 test1 test2 test3 test3
2 500 50 750 test1 test2 test3 test2
3 1 500 5 test1 test2 test3 test1
4 50 500 15 test1 test2 test3 test3
推荐阅读
- google-apps-script - 使用 Apps 脚本为 GDocs 中的行或表格单元格添加边框
- mysql - Hibernate 和 EclipseLink 兼容的 TableGenerator 配置
- elasticsearch - 为什么在 elasticsearch 的全文搜索中,更精确的匹配比不太精确的匹配得分低?
- python - 从包含特定字符串的数据框中删除行
- solr - 在 solr 中仅索引来自 HTML 的纯文本
- php - 如何在yii2中添加最小计算
- android - 当应用程序在android后台时如何从推送通知中接收自定义数据
- spring - 如何为生产设置 Corda 节点?
- powershell - powershell日期比较需要删除文件
- html - justify-content 和 align-items 在使用显示时无法正常工作:flex