利用Python,完成对ID相同值最小的行的删除??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Python,完成对ID相同值最小的行的删除??相关的知识,希望对你有一定的参考价值。

如:
a 1
a 2
a 4
b 2
b 2
c 3

结果:
a 4
b 2
c 3

使用pandas将很容易得到你要的结果:

import pandas as pd

s = pd.Series([1,2,4,2,2,3],index=['a','a','a','b','b','c'])

s.groupby(level=0).max()

结果见下图:

追问

abc是id,后面的数是值,对于单个字母只取值最大的这一行,并输出

参考技术A

mydir = 

myls = [('a',1),('a',2),('a',4),('b',2),('b',2),('b',3)]

for x,y in myls:#统计有哪些键

    mydir[x] = 0

for x,y in myls:#统计出最值

    if mydir[x] < y:

        mydir[x] = y

#新的字典里已经有新值,可以写入新的文件中


print(mydir)

这里只是演示。

本回答被提问者和网友采纳
参考技术B

用字典处理,重复key比大小

Python:返回矩阵中最小值的行索引

【中文标题】Python:返回矩阵中最小值的行索引【英文标题】:Python: return the row index of the minimum in a matrix 【发布时间】:2016-09-16 02:55:21 【问题描述】:

我想打印包含矩阵最小元素的行的索引

我的矩阵是matrix = [[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]]

和代码

matrix = [[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]]
a = np.array(matrix)
buff_min = matrix.argmin(axis = 0)

print(buff_min)   #index of the row containing the minimum element

min = np.array(matrix[buff_min])

print(str(min.min(axis=0)))  #print the minium of that row

print(min.argmin(axis = 0)) #index of the minimum

print(matrix[buff_min]) # print all row containing the minimum

运行后,我的结果是

1 3 1 [22、3、4、12]

第一个数字应该是2,因为第三个列表中的最小值是2([34,6,4,5,8,2]),但是它返回1。它返回 3 作为矩阵的最小值。 什么错误?

【问题讨论】:

buff_min = matrix.argmin(axis = 0) ?我认为列表没有属性argmin 【参考方案1】:

我不确定您使用的是哪个版本的 Python,我在 Python 2.7 和 3.2 上对其进行了测试,因为提到您的 argmin 语法不正确,它应该是格式

import numpy as np
np.argmin(array_name,axis)

接下来,Numpy 知道任意对象的数组,它针对具有固定维度的同构数字数组进行了优化。如果您真的需要数组数组,最好使用嵌套列表。但是根据数据的预期用途,不同的数据结构可能会更好,例如如果您有一些无效的数据点,则为掩码数组。

如果您真的想要灵活的 Numpy 数组,请使用以下内容:

np.array([[22,33,44,55],[22,3,4,12],[34,6,4,5,8,2]], dtype=object)

但是,这将创建一个存储对列表的引用的一维数组,这意味着您将失去 Numpy 的大部分优势(向量处理、局部性、切片等)。

另外,如果你可以调整你的 numpy 数组的大小可能会起作用,我还没有测试过它,但是按照这个应该是一个简单的解决方案的概念。但是在这种输入情况下我更喜欢使用嵌套列表矩阵

【讨论】:

你是对的'关于数组的固定维度,我已经分心了。无论如何,我用“a”(现在是同构数组列表)输入 buff_min = a.argmin(axis = 0) 并且它也可以在没有方法的数组参数的情况下工作;您的解决方案更清晰,但我不明白这是否是错误,因为我的环境在我运行代码时没有返回警告,结果是我所期望的 是的 Lorenzo,一定是由于基于环境的编译器差异,但这很奇怪。无论如何,我猜你有你的解决方案。【参考方案2】:

这行得通吗?

np.where(a == a.min())[0][0]

请注意,矩阵的所有行都需要包含相同数量的元素。

【讨论】:

以上是关于利用Python,完成对ID相同值最小的行的删除??的主要内容,如果未能解决你的问题,请参考以下文章

如何获取具有相同ID的行的分组信息的列? [复制]

Python:返回矩阵中最小值的行索引

在 Pandas、Python 中查找具有相同第一列的所有行的最小值、最大值、平均值

如何删除R中两列中具有相同值但ID不同的行[重复]

使用java在sql中查找具有相同数据的具有相同值的行?

Matlab:用不包括自身的行的最小值替换矩阵中的元素