#python #list #filter #split #subset
#python #Список #Фильтр #разделение #подмножество
Вопрос:
Здесь очень новый пользователь python. У меня есть фрейм данных, который я пытаюсь подмножить любыми уникальными значениями, которые находятся в столбце «Уровень». Я бы хотел, чтобы каждая подустановка приводила к списку или собственному фрейму данных. В этом примере у меня уровень 1, 2, 3, 4, 5, поэтому я бы хотел либо 5 отдельных фреймов данных с только одним уникальным значением в каждом фрейме данных, либо список с 5 разными значениями. Вот фрейм данных:
Использование Python 3.7
import pandas as pd
import numpy as np
data = [['Bill', 21, 'Level 1'], ['Joe', 25, 'Level 1'],['Sam', 22, 'Level 2'],['Ash', 19, 'Level 3'],['Mike', 28, 'Level 3'],['Ang', 20, 'Level 4'],['Paul', 25, 'Level 4'],['Kathy', 29, 'Level 5']]
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Level'])
Я могу получить желаемые результаты, если я знаю имена разных уровней и могу жестко закодировать их в коде. Моя проблема в том, что я не всегда знаю, что будет в столбце «Уровень». Код должен быть достаточно умным, чтобы определять разные уровни, разделять их и сохранять результат в фреймах данных или списке. Я не совсем уверен, как приступить к этому..
Спасибо!
Ответ №1:
Посмотрите, решает ли это вашу проблему
Чтобы получить все уникальные уровни в ваших данных:
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Level'])
levels = list()
levels = df['Level']
levels = set(levels)
print(levels) # gives you all the unique levels (1 to 5)
Чтобы получить данные каждого уровня (все вместе):
data = [['Bill', 21, 'Level 1'], ['Joe', 25, 'Level 1'],['Sam', 22, 'Level 2'],['Ash', 19, 'Level 3'],['Mike', 28, 'Level 3'],['Ang', 20, 'Level 4'],['Paul', 25, 'Level 4'],['Kathy', 29, 'Level 5']]
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Level'])
levels = list()
levels = df['Level']
levels = set(levels) ## gets unique levels {'Level 1', 'Level 2', 'Level 3', 'Level 4', 'Level 5'}
for l in levels:
df_level = df.loc[df['Level'] == l]
print("Data for Level:" l)
print(df_level[['Name','Age']])
print("======================")
Вывод
Data for Level:Level 4
Name Age
5 Ang 20
6 Paul 25
======================
Data for Level:Level 5
Name Age
7 Kathy 29
======================
Data for Level:Level 3
Name Age
3 Ash 19
4 Mike 28
======================
Data for Level:Level 1
Name Age
0 Bill 21
1 Joe 25
======================
Data for Level:Level 2
Name Age
2 Sam 22
======================