Нахождение количества раз, когда столбец имел максимальное число для этой конкретной строки - PullRequest
1 голос
/ 27 февраля 2020

Я довольно новичок в Python. Я пытаюсь определить функцию для набора данных ниже.

[demo.csv] https://docs.google.com/spreadsheets/d/1wJeAKlBnP3MBTlNykYBHP8D-V0X4ClpPWdJpddaetbQ/edit?usp=sharing

Предположим, что в данных столбцах данных от cell 1 до cell 6 не имеет значения. Я хочу знать, сколько раз cell 7 имело максимальное значение по сравнению с данными в столбцах от cell 8 до cell 16 для этой конкретной строки. Поэтому в идеале код должен проверять все строки, в которых cell 7 имеет максимальное значение по сравнению с cell 8 до cell 16, и печатать это число.

Я работаю над чем-то, но потерял себя в средний. Вот мой код:

def ntimes(filename):
    data=pd.read_csv(filename, sep=',')
    cntcell7=0
    t='cell7'
    column_names = list(data.columns.values)
    max_index = data.idxmax()
    row_data = data.loc[max_index, column_names[-10:]]
    final_column_name = row_data.idxmax()
    for j in final_column_name:
        if final_column_name==t:
            cntcell7=cntcell7+1
        return (cntcell7)
ntimes("demo.csv")

Позвольте мне объяснить, что я пытался сделать. Я пытался найти имя столбца для каждого максимального значения в последних 10 столбцах, используя idxmax(), и повторить его по всем строкам. Затем посчитайте, сколько раз это имя столбца появляется. Но я определенно сделал что-то не так.

В идеале для данного набора данных счет должен возвращаться как 4

1 Ответ

0 голосов
/ 27 февраля 2020

Вероятно, не самый чистый способ выбора количества столбцов, но это работает:

import pandas as pd

df = pd.DataFrame([
    [34224, 47465,  758,    3326,   106,    142,    363,    104,    120,    121],
    [5710,  2492,   117,    153,    100,    103,    173,    100,    103,    103],
    [38737, 18950,  271,    928,    105,    118,    348,    103,    118,    127],
    [5514,  3175,   128,    184,    100,    102,    165,    100,    102,    103],
    [115285,    97418,  743,    4570,   111,    139,    670,    111,    172,    176],
    [177423,    386661, 1312,   7201,   150,    229,    888,    134,    174,    224]
])

max_in_col0 = df[0] == df.iloc[:, range(0,10)].max(axis=1)
print(max_in_col0.value_counts()[True])

Конечно, это также работает, но я включил вышеупомянутое, так как вы упомянули о желании выбрать конкретный c набор столбцов:

max_in_col0 = df[0] == df.max(axis=1)
print(max_in_col0.value_counts()[True])

.iloc[:, range(0,10)] выбирает столбцы от 0 до 9, поэтому в ваших данных вы, вероятно, go .iloc[:, range(6,16)].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...