Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331

Посчитать количество битв у каждого короля из таблицы и построить график

21.11.2021, 21:03. Показов 1656. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется следующая таблица с данными. Мне нужно сделать так, чтобы считалось сколько битв было у каждого короля в каждом году. Пример, Robb Stark дрался в 298 году 7 раз (4 раза как защищающийся и 3 раза как атакующий.), Joffrey тоже дрался 7 раз в 298 году. Я могу вывести результат только по атакующим или защищающимся(2 скрин), а как это сделать вместе я незнаю.
Миниатюры
Посчитать количество битв у каждого короля из таблицы и построить график   Посчитать количество битв у каждого короля из таблицы и построить график  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2021, 21:03
Ответы с готовыми решениями:

Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество трое
Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество троек и количество двоек

Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество трое
Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество троек и количество...

Посчитать и построить график функций
Помогите пожалуйста.

16
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
21.11.2021, 21:18  [ТС]
1 битва - 1 месяц. Если например получается 13 месяцев, то нужно вывести 1 год и 1 месяц.
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
22.11.2021, 12:05
Вы же работаете с Python/Pandas? Тогда вариантов много.
Но раз вы не привели воспроизводимого примера, а набивать вручную ваш пример почему-то особого желания нет, тогда ответ "на словах".
У вас есть два датафрейма. Один для атакующих, другой для обороняющихся.
Самый "лобовой" вариант. Просто циклом проходитесь по всем элементам первой таблицы. Из каждой строчки вытягиваете пары "Король", "Год" запоминаете при этом "количество атакующих битв". Используете эту пару как вход поиска по второй таблице, получаете "количество оборонных битв". Складываете с "количеством атакующих битв", получаете "общее количество битв короля в данном году".
Можно проще. Присоединяете (concat) вторую таблицу к первой, потом делаете группировку по паре "королю","год", потом суммируете полк "количество битв" внутри группы.
Есть и другие способы, но думаю, пока вы можете попробовать реализовать эти.

Цитата Сообщение от danhiroman Посмотреть сообщение
1 битва - 1 месяц. Если например получается 13 месяцев, то нужно вывести 1 год и 1 месяц.
А это тут причем? Откуда взялось "1 битва - 1 месяц". Вроде спрашивали "сколько битв было у каждого короля в каждом году" . Что при этом будет означать ответ "1 год и 1 месяц"?
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
22.11.2021, 20:16  [ТС]
passant, Вот я получаю таким способом 2 датафрейма, но вот как дальше по ним пройтись? И как сделать, чтобы столбец, в который выводится количество войн у короля назывался не 'year'? Или я вообще не правильно получаю данные из изначального датафрейма?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
 
data = pd.read_csv('battles.csv', header=0)
 
print(data.head())
 
print('Данные о количестве войн королей, за атакующих')
attacker = data.groupby(['attacker_king', 'year'], dropna=True)[['year']]
print(attacker.agg('count'))
 
print('Данные о количестве войн королей, за защитников')
defender = data.groupby(['defender_king', 'year'], dropna=True)[['year']]
print(defender.agg('count'))
Миниатюры
Посчитать количество битв у каждого короля из таблицы и построить график  
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
22.11.2021, 20:42
Цитата Сообщение от danhiroman Посмотреть сообщение
И как сделать, чтобы столбец, в который выводится количество войн у короля назывался не 'year'?
Откуда я знаю? Посмотрите в файл, посмотрите как там называется этот столбец. При необходимости его всегда можно переименовать. Не понимаю, в чем проблема?
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
22.11.2021, 20:58  [ТС]
passant, passant, Можете уже не на словах, а на примере показать как нужно сделать вот это "Просто циклом проходитесь по всем элементам первой таблицы. Из каждой строчки вытягиваете пары "Король", "Год" запоминаете при этом "количество атакующих битв". Используете эту пару как вход поиска по второй таблице, получаете "количество оборонных битв". Складываете с "количеством атакующих битв", получаете "общее количество битв короля в данном году"."?
0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
22.11.2021, 21:26
Цитата Сообщение от danhiroman Посмотреть сообщение
passant, passant, Можете уже не на словах, а на примере показать как нужно сделать вот это "Просто циклом проходитесь по всем элементам первой таблицы. Из каждой строчки вытягиваете пары "Король", "Год" запоминаете при этом "количество атакующих битв". Используете эту пару как вход поиска по второй таблице, получаете "количество оборонных битв". Складываете с "количеством атакующих битв", получаете "общее количество битв короля в данном году"."?
Простите, вы что, действительно не понимаете, как пройтись по таблице циклом? Элементарным циклом for?
Как вытянуть пару и использовать ее для запроса в другой таблице? Как сложить два значения переменных и запомнить результат в новой таблице? Надеюсь, что можете - это же элементарные вещи, которые описываются на начальных страницах учебника по программированию. Eсли не можете - тогда надо подтянуть свои познания в этой области. Я вам подробно расписал алгоритм, там уже осталось что называется - бери и пиши код. Но вот ликбез по Python проводить на форуме в мои планы не входит.
1
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
23.11.2021, 12:38
danhiroman,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import pandas as pd
from random import shuffle
 
#####################################
# создание массива - нет аналога в топике 
np.random.seed(1000)
df = pd.DataFrame(np.array([[298]*12 + [299]*12]).T, columns = ['year']) # создание фрейма
king = ['ABC']*6 + ['DEF']*6 + ['GHI']*6 + ['JKL']*6
shuffle(king)
df['attacker_king'] = king
shuffle(king)
df['defender_king'] = king
df['просто_так'] = np.arange(5,125,5)
#print(df)
################################
 
################################
# требуемая обработка
df1 = pd.concat([df[['year', 'attacker_king']],df[['year', 'defender_king']]], axis=0)
df1['king'] = np.where(df1['attacker_king'].isna(), df1['defender_king'], df1['attacker_king'])
 
print(df1.groupby(['king', 'year'])['king'].count())
################################
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
23.11.2021, 15:20  [ТС]
Gdez, Спасибо, сейчас буду пробовать.
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
26.11.2021, 10:15  [ТС]
Gdez, Извиняюсь это снова я. А можно как то вытаскивать из df1, нужные мне числа? Например мне нужно число битв, которое подходит для king="Stark" и year="299"? Пытаюсь обращаться по ключам 'king' и 'year'. Но говорит, что keyerror
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
26.11.2021, 10:24  [ТС]
Исходный набор данных.
Вложения
Тип файла: rar bats.rar (787 байт, 2 просмотров)
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
26.11.2021, 10:39  [ТС]
Я так понимаю если мы используем этот вариант. То в результате мы получаем список из чисел верно?
Python
1
df1.groupby(['king', 'year'])['king'].count()
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.11.2021, 10:53
danhiroman, если нужно работать по сгруппированным данным, то в начале нужно не print (23-я строка), а присвоить :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import pandas as pd
from random import shuffle
 
#####################################
# создание массива - нет аналога в топике 
np.random.seed(1000)
df = pd.DataFrame(np.array([[298]*12 + [299]*12]).T, columns = ['year']) # создание фрейма
king = ['ABC']*6 + ['DEF']*6 + ['GHI']*6 + ['JKL']*6
shuffle(king)
df['attacker_king'] = king
shuffle(king)
df['defender_king'] = king
df['просто_так'] = np.arange(5,125,5)
#print(df)
################################
 
################################
# требуемая обработка
df1 = pd.concat([df[['year', 'attacker_king']],df[['year', 'defender_king']]], axis=0)
df1['king'] = np.where(df1['attacker_king'].isna(), df1['defender_king'], df1['attacker_king'])
 
df1 = df1.groupby(['king', 'year'])['king'].count()
################################
print(df1)
print(df1['ABC',299])
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
26.11.2021, 11:00  [ТС]
Gdez, Я так и делал. Я присваивал и потом пытался извлекать, но это не давало нужного результата. Хотел вывести название всех столбцов в список, чтобы проверить есть ли вообще столбцы тут, но выдаёт ошибку.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
data = pd.read_csv('battles.csv', header=0)
 
new = pd.DataFrame([data.name, data.year, data.battle_number, data.attacker_king, data.defender_king]).transpose()
new.to_csv('bats.csv', header=0)
print(new.head())
df1 = pd.concat([data[['year', 'attacker_king']], data[['year', 'defender_king']]], axis=0)
df1['king'] = np.where(df1['attacker_king'].isna(), df1['defender_king'], df1['attacker_king'])
 
df1 = df1.groupby(['king', 'year'])['king'].count()
 
print(df1.columns.values.tolist()) #'Series' object has no attribute 'columns' 
 
print(df1)
print(df1['ABC',299])
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.11.2021, 11:38
danhiroman,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np
 
data = pd.read_csv('battles.csv', header=None, index_col=0)
#print(data)
# new = pd.DataFrame([data.name, data.year, data.battle_number, data.attacker_king, data.defender_king]).transpose()
 
data.columns = ['name', 'year', 'battle_number', 'attacker_king', 'defender_king']
#print(data)
data.to_csv('bats.csv', header=0, index=False)
#print(new.head())
df1 = pd.concat([data[['year', 'attacker_king']], data[['year', 'defender_king']]], axis=0)
df1['king'] = np.where(df1['attacker_king'].isna(), df1['defender_king'], df1['attacker_king'])
 
df1 = df1.groupby(['king', 'year'])['king'].count()
 
#print(df1.columns.values.tolist()) #'Series' object has no attribute 'columns' 
 
print(df1)
print(df1['Robb Stark',299])
0
2 / 2 / 0
Регистрация: 26.05.2020
Сообщений: 331
26.11.2021, 11:43  [ТС]
Gdez, Вот за секунду до вашего ответа. Я понял насколько же я идиот.

Добавлено через 9 секунд
Gdez, Спасибо и извините.
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.11.2021, 11:52
danhiroman, Ок
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2021, 11:52
Помогаю со студенческими работами здесь

Посчитать площадь фигуры и построить график
Нужно найти площадь фигуры ограниченную линиями: y1=x^2,y2=8, ось ординат Мой код выдает ошибку: cсlear, clc syms x y1=@(x)x.^3;...

Посчитать количество записей каждого состояния для каждого ответственного и общее кол-во записей
Приветик! Нужно автоматизировать обработку данных в Excel, ну то есть чтобы все автоматически делалось. Нужно посчитать количество записей...

Посчитать минимальные расходы королевства на подарок короля
В Берляндии наступил праздник равенства. В честь праздника король решил за счёт государственной казны уравнять благосостояние всех граждан...

Посчитать количество определенных чисел в столбце таблицы и записать его в следующий столбец таблицы
Здарвствуйте. Прошу совета. В Microsoft access 2007 есть таблица. В одном столбце имеется запись вида: 240;623;738;770 В следующей...

Посчитать количество каждого символа
У меня было задание посчитать количество каждого символа в строке. Мой метод выглядел как-то так: Dictionary<char, int>...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru