Python 从数据帧列创建1D数组

Python 从数据帧列创建1D数组,python,numpy,dataframe,Python,Numpy,Dataframe,我正在寻找一种从包含特性行的数据框中获取类标签的方法 例如,在本例中: df = pd.DataFrame([ ['1', 'a', 'bb', '0'], ['1', 'a', 'cc', '0'], ['2', 'a', 'dd', '1'], ['2', 'a', 'ee', '1'], ['3', 'a', 'ff', '2'], ['3', 'a', 'gg', '2'], ['3', 'a', 'hh',

我正在寻找一种从包含特性行的数据框中获取类标签的方法

例如,在本例中:

df = pd.DataFrame([
['1',   'a',    'bb',   '0'],
['1',   'a',    'cc',   '0'],
['2', 'a',    'dd',   '1'],
['2',   'a',    'ee',   '1'],
['3', 'a',    'ff',   '2'],
['3', 'a',    'gg',   '2'],
['3', 'a',    'hh',   '2']], columns = ['ID', 'name', 'type', 'class'])

df 
    ID  name    type class
0   1    a      bb      0
1   1    a      cc      0
2   2    a      dd      1
3   2    a      ee      1
4   3    a      ff      2
5   3    a      gg      2
6   3    a      hh      2
我的类数组应该是(即,对于每个
ID
class
值应该选取一次):

编辑

df['class'].值
生成
数组(['0','0','1','1','2','2','2'],dtype=object)

预期答复:


我想要
数组([0,1,2])
您可以使用
groupby
+
unique()
如下所示:

>>> df.groupby('ID')['class'].unique().astype(int).to_numpy()
array([0, 1, 2])
对于给定的
数据帧
,可以使用以下方法:

解决方案1::

>>> df['class'].unique()
array(['0', '1', '2'], dtype=object)

#in case you want int outputs
>>> df['class'].unique().astype(int)
array([0, 1, 2])
解决方案2

>>> df['class'].value_counts(ascending=True).index.to_numpy().astype(int)
array([0, 1, 2])

如果多个ID可以具有相同的类,则可以选择“ID”列和“类”列并删除重复项,然后获取类列。否则,只需按照其他答案中的建议使用unique(当然,您也可以将此答案转换为ints):

或者类似于@wii在评论中的建议:

df.drop_duplicates('ID')['class'].values
#['0' '1' '2']

您在哪一部分遇到问题?-
df.drop_duplicates('ID')['class']
创建时,数据框在列中包含字符串。这就是
values
提供给您的内容。@wwii就是这样,谢谢。这个答案的问题是,如果您有其他
id
具有以前列出的类,则不会包含该值(例如
id=10
后跟class
0
,因为该类已经存在,所以不会出现在预期的数组中。
df[['ID','class']].drop_duplicates()['class'].values
#['0' '1' '2']
df.drop_duplicates('ID')['class'].values
#['0' '1' '2']