У меня есть файл, которым я должен манипулировать с помощью Python.
Файл состоит из записей, как показано ниже
student_id Имя Фамилия Дата рождения Пол Класс
1 Джон Тейлор 2010-05-07 M ClsA
2 Мэри Оливер 2010-01-29 F ClsA
3 Питер Эдвардс 23.10.2010 M ClsA
4 Роберт Льюис 2010-12-02 M ClsB
5 Эмили Кларк 2009-12-04 F ClsB
6 Джереми Вуд 2009-08-15 М, КлБ
7. Уилл Беннетт, 2008-11-30 M, ClsC
8 Таня Ли 2009-05-11 F ClsC
Мне нужно создать новый файл, в который я передаю все данные только для тех классов, где самым старшим учеником в классе является мужчина.
Взяв приведенный выше пример, мой новый файл должен быть таким:
Как я могу сгруппировать по классу, а затем условно записать в новый файл?
Обновил сообщение.






import pandas as pd
a = [['John Taylor', '2010-05-07', 'M', 'ClsA'],
['Mary Oliver', '2010-01-29', 'F', 'ClsA'],
['Peter Edwards', '2010-10-23', 'M', 'ClsA'],
['Robert Lewis', '2010-12-02', 'M', 'ClsB'],
['Emily Clark', '2009-12-04', 'F' ,'ClsB'],
['Jeremy Wood', '2009-08-15', 'M', 'ClsB'],
['Will Bennett', '2008-11-30', 'M', 'ClsC'],
['Tanya Lee', '2009-05-11', 'F', 'ClsC']]
df = pd.DataFrame(a, columns=['name', 'date', 'gender', 'cl'])
df['date'] = pd.to_datetime(df['date'])
aaa = []
for i in ['ClsA', 'ClsB', 'ClsC']:
qqq = df.loc[df['cl'] == i].sort_values(by='date', ascending=True).reset_index().values[0, 3]
if qqq == 'M':
aaa.append(i)
print((df.loc[df['cl'].isin(aaa)]).reset_index())
Выход
index name date gender cl
0 3 Robert Lewis 2010-12-02 M ClsB
1 4 Emily Clark 2009-12-04 F ClsB
2 5 Jeremy Wood 2009-08-15 M ClsB
3 6 Will Bennett 2008-11-30 M ClsC
4 7 Tanya Lee 2009-05-11 F ClsC
В цикле я проверяю, есть ли в классе пожилой мужчина. Я создаю в нем список необходимых классов. С помощью которого я вывожу всех учеников этих классов.
спасибо за ваш ответ, но это дает мне только самого старшего ученика! Мне нужно собрать всех учеников в классы, где самый старший ученик - мужчина! Результатом должны быть следующие строки: 4 Роберт Льюис 2010-12-02 M ClsB 5 Эмили Кларк 2009-12-04 F ClsB 6 Джереми Вуд 2009-08-15 M ClsB 7 Уилл Беннетт 2008-11-30 M ClsC 8 Таня Ли 2009-05-11 F ClsC
@ msmith1209 Обновил сообщение. Теперь я понял вас и сделал, как вы просили. Если мой ответ помог, проголосуйте за ответ. Установите галочку, которая находится под верхним и нижним треугольником.
У вас есть код, которым вы можете поделиться, или вы надеетесь, что кто-то напишет его для вас?