所以我要去一个由x
行排成20列的表,我需要为每一行找到最高值所属的列。
例如:
The Table would be something like this (but larger)
A B C D E F G
1 2 3 4 5 6 7
9 8 7 6 5 4 3
7 6 5 8 4 3 2
0.9 0.01 0.02 0.2 0.04 0.3 ...
我希望吐出来:G,A,D,A.
我需要把它放到另一个文件中。它甚至不必与字母。我稍后会用它做点什么。
我一直试图弄清楚这样做的最佳方法,并且我一直在努力尝试用R来做,这是我到目前为止的脚本:
#!/usr/bin/env Rscript
a=read.table(get(TEST.csv),header=T,sep="",dec=".")
apply(a, 1, which.max)
它不想读我的测试文件。 对于python,我有以下内容:
import numpy as np
import csv
a=np.genfromtxt('./TEST.csv',delimiter='\t',skip_header=1)
print(a)
amax=np.amax(a,axis=1)
print(amax)
这个正确地提取每行的最高值,但它不像我喜欢的那样提取列号。 任何和所有建议将不胜感激。
答案 0 :(得分:4)
您可以在max.col
R
names(a)[max.col(a, 'first')]
#[1] "G" "A" "D" "A"
答案 1 :(得分:3)
您可以使用pandas.read_csv将文件读入数据框,然后使用[idxmax][2]
:
import pandas as pd
df = pd.read_csv("in.csv", delimiter="\s+")
print(df.idxmax(axis=1))
0 G
1 A
2 D
3 A
dtype: object
用适当的分隔符替换分隔符。
答案 2 :(得分:1)
在numpy中,使用argmax函数:
import numpy as np
a = np.array([[0, 1, 2],
[3, 4, 5]])
np.argmax(a, axis=0)
# array([1, 1, 1])
np.argmax(a, axis=1)
# array([2, 2])
在您的情况下,axis
应为1。
答案 3 :(得分:0)
df=pd.read_csv('./'+'FileName',delimiter='\t', usecols=range(1,21))
amax=df.idxmax(axis=1)
str1=''.join(amax)
str2=''
for index,c in enumerate(str1):
if c in mydict:
str2=str2+(str(index+1)+'\t'+str(mydict[c])+"\n")
text_file=open('NewName',"w")
text_file.write(str2)
text_file.close()