Как вынести строку матрицы, которая содержит максимум в каждом столбце? - PullRequest
0 голосов
/ 23 января 2019

У меня есть матрица данных с 3 столбцами: x, y, z: каждый с большим количеством строк.

Мне нужно найти строку, содержащую максимум каждый раз для каждого столбца, а также то же самоечто-то для минимумов, затем запишите все эти строки в фрейм данных.

допустим, у меня есть:

x= [1,2,4,3] , y= [7,8,6,5] , z= [12,10,11,9]

, чтобы найти соответствующую строку, которую я сделал:

alldata=[];

alldata.append([x]);

alldata.append([y]);

alldata.append([z]);

for elem in alldata:
    xarr=np.array(elem)
    rowmax=xarr.argmax()
    ind= alldata.index(elem)
    maxcorr.append(alldata[ind][0][rowmax])

for elem in alldata:
    xarr=np.array(elem)
    rowmin=xarr.argmin()
    ind= alldata.index(elem)
    maxcorr.append(alldata[ind][0][rowmin])

проблема в том, когда мне нужно написать соответствующую строку, которая будет выглядеть примерно так:

xmax, y, z, x2, ymax, z2, x3, y3, zmax, xmin, y4, z4, .....

для записи соответствующей строки, которую я пытался:

x=np.transpose(x);

y=np.transpose(y);

z=np.transpose(z);

mydata=[]
mydata.append(x)
mydata.append(y)
mydata.append(z)

mydata=np.array(mydata)

для записи на фрейме данных:

casename=['Xmax', 'Y', 'Z', ,'Xmin', 'Y', 'Z', 'X', 'Ymax', 'Z', 'X', 'Ymin', 'Z', 'X', 'Y', 'Zmax','X', 'Y', 'Zmin']
mydata=np.array(mydata).reshape(-1, len(casename))
df = pd.DataFrame(mydata, index=Filenames, columns=casename)

ясно, что mydata - это форма, которую я ищу, это не сформулировано в коде, и это мой вопрос.становится невозможным извлечь соответствующую строку из mydata

Например, вывод, который я хочу в соответствии с примером:

[4, 5, 11, 1, 7, 12, 2, 8,10, 3,5,9, 1,7,12, 3,5,9]

также одно: имена файлов не должны изменяться, потому что у меня есть несколько файлов с этими X, Y,Данные Z

1 Ответ

0 голосов
/ 23 января 2019

Я решаю это с помощью pandas, так как вы пометили вопрос тем же. Кроме того, я не могу соответствовать выводу, который вы дали. Я надеюсь, что это опечатка. Но я пошел по описанию, которое вы дали, т.е. xmax,y,z,x2,ymax,z2,x3,y3,zmax,xmin,y4,z4,.....

df = pd.DataFrame(list(zip(x, y, z)), columns=['x', 'y', 'z'])
mylist = []
for i in df.columns:
    mylist+=(list(df.loc[df[i].argmax()]))
for i in df.columns:
    mylist+=(list(df.loc[df[i].argmin()]))
Out: [4, 6, 11, 2, 8, 10, 1, 7, 12, 1, 7, 12, 3, 5, 9, 3, 5, 9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...