Как бы я go нашел максимальное значение каждые 13 строк в python? - PullRequest
3 голосов
/ 03 марта 2020

Дело в том, что у меня есть, скажем, следующая база данных:

A B
1 5
2 6 
3 7
4 1
5 4
6 3
7 5 
8 8 
9 5

Допустим, имя этого фрейма данных df

Так что я хочу код, который для каждого 3 строки в этом случае (мой случай 13), чтобы получить максимум, поэтому результат будет примерно таким:

row 3 has a max of 7 
row 5 has a max of 4 
row 8 has a max of 8 

Я думал о том, что для чего-то вроде этого

count = 0
count1 = 3
for vals in df[B]:
    max = max(vals.iloc[count:count1])
    count = count + 3
    count1 = count1 + 3
    print(max)

Но при этом я получаю AttributeError: у объекта 'float' нет атрибута 'ilo c'

Так что любые идеи приветствуются. Спасибо

Ответы [ 2 ]

3 голосов
/ 03 марта 2020

Используйте groupby для пользовательского groupID и idxmax и loc. Используйте n в качестве количества строк, которые вы хотите сгруппировать

n = 3
df_out = df.loc[df.groupby(np.arange(len(df)) // n).B.idxmax()]

Out[1201]:
   A  B
2  3  7
4  5  4
7  8  8
3 голосов
/ 03 марта 2020

Вы можете просто разделить свой список на разделы по 3, выполнив

a = [[a[i], a[i+1], a[i+2]] for i in range(0, len(a), 3)]

Где a - список, содержащий значения столбца B. Вывод:

[[5, 6, 7], [1, 4, 3], [5, 8, 5]]

Затем найдите Максимальное значение каждого блока, и отображать соответствующий индекс. Используя al oop, вы можете просмотреть список, найти индекс значения и распечатать его.

slice = 0
for i in range(len(a)):
    "row {} has a max of {} ".format(slice + a[i].index(max(a[i])), max(a[i]))
    slice = slice + 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...