使用python中列唯一值的动态列表按列拆分数据框

问题描述 投票:0回答:1

非常新的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'])

如果我知道不同级别的名称并且可以将其硬编码到代码中,我可以获得所需的结果。我的问题是我并不总是知道“级别”列中的内容。代码需要足够智能以检测不同级别,由此进行拆分,并将结果保存在数据框或列表中。我不确定如何开始这个...

谢谢!

python list filter split subset
1个回答
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
======================
© www.soinside.com 2019 - 2024. All rights reserved.