如何在python的一行中选择最小的数字?

时间:2019-04-09 08:55:56

标签: python pandas numpy

我每一行都有多个数字的数据,如下所示:

gene    numbers
P53     11 11 11 7 13 8 8
ACE     6 5 4 5 3
BRCA    2 2 1

我希望数字列仅包含该行中的最小数字,例如输出:

gene    numbers
P53     8
ACE     3
BRCA    1

我在这里已经找到了其他答案,但是大多数答案是对多行进行排序,并在一列而不是一行中查找最小的数字。 例如,我尝试使用:

data = pd.read_csv('data.csv', header=0)
data = data.drop(["gene"],1)
df = pd.DataFrame(data)
matrix = df.as_matrix()
result1 = list(map(min, matrix))
result2 = list(map(min, zip(*matrix)))

但是这会导致以下错误:

TypeError: '<' not supported between instances of 'float' and 'str'

任何帮助/指导将不胜感激。

1 个答案:

答案 0 :(得分:3)

如果只有numbers列中填充了以空格分隔的数字,该数字首先由split分隔,然后转换为整数并得到min

df['numbers'] = df['numbers'].apply(lambda x: min(map(int, x.split())))
print (df)
   gene  numbers
0   P53        7
1   ACE        3
2  BRCA        1

另一种解决方案:

df['numbers'] = df['numbers'].str.split(expand=True).astype(float).min(axis=1).astype(int)
print (df)
   gene  numbers
0   P53        7
1   ACE        3
2  BRCA        1