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
后跟class0
,因为该类已经存在,所以不会出现在预期的数组中。
df[['ID','class']].drop_duplicates()['class'].values
#['0' '1' '2']
df.drop_duplicates('ID')['class'].values
#['0' '1' '2']