Разделение фрейма данных по столбцу с использованием динамического списка уникальных значений этих столбцов в Python - PullRequest
0 голосов
/ 11 апреля 2019

Очень новый пользователь 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 Ответ

1 голос
/ 11 апреля 2019

Посмотрите, решит ли это вашу проблему

Чтобы получить все уникальные уровни в ваших данных:

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
======================
...