如何获取功能的不同类的值列表? [复制]

Posted

技术标签:

【中文标题】如何获取功能的不同类的值列表? [复制]【英文标题】:How to get the list of values of different classes for a feature? [duplicate] 【发布时间】:2022-01-01 06:59:53 【问题描述】:

我有一个数据框。我想获取不同类的所有值的列表。

df = pd.DataFrame([(3, 1),
                    (4, 3),
                    (6, 2),
                    (7, 2),
                    (2, 3),
                    (4, 2),
                    (4, 1),
                    (1, 3),
                    (6, 3),
                    (8, 1)],
                    columns=['Feature', 'Class'])

在上面的示例中,我有三个类,即 1、2 和 3。我想获得一个类中所有不同值列表的输出。输出可以如下:

Class 1: [3, 4, 8]
Class 2: [6, 7, 4]
Class 3: [4, 2, 1, 6]

【问题讨论】:

df.Feature.groupby(df.Class).apply(list) 【参考方案1】:

正如this 很好的答案所指出的,您可以使用pandas.DataFrame.groupby() 方法和pandas.DataFrame.apply() 方法来实现这一点:

import pandas as pd

df = pd.DataFrame([(3, 1),
                   (4, 3),
                   (6, 2),
                   (7, 2),
                   (2, 3),
                   (4, 2),
                   (4, 1),
                   (1, 3),
                   (6, 3),
                   (8, 1)],
                  columns=['Feature', 'Class'])

print(df.groupby('Class')['Feature'].apply(list))

输出:

Class
1       [3, 4, 8]
2       [6, 7, 4]
3    [4, 2, 1, 6]
Name: Feature, dtype: object

但是,如果您想逐个遍历类号,更直观的方法是使用pandas.DataFrame.loc 属性,如下所示:

print(df.loc[df['Class'] == 1])

输出:

   Feature  Class
0        3      1
6        4      1
9        8      1

或包含"Feature" 列以获取:

print(df.loc[df['Class'] == 1]["Feature"])

输出:

0    3
6    4
9    8
Name: Feature, dtype: int64

【讨论】:

【参考方案2】:
d = 
[d.setdefault(v.Class, []).append(v.Feature) for _, v in df.iterrows()]
d
# 1: [3, 4, 8], 3: [4, 2, 1, 6], 2: [6, 7, 4]

【讨论】:

【参考方案3】:

你可以简单地做到这一点:

classes = df.groupby('Class')['Feature'].apply(list)

输出:

>>> classes
Class
1       [3, 4, 8]
2       [6, 7, 4]
3    [4, 2, 1, 6]
Name: Feature, dtype: object

你可以这样打印它们:

>>> for class_number, items in classes.items():
...     print(f'Class class_number: items')
...
Class 1: [3, 4, 8]
Class 2: [6, 7, 4]
Class 3: [4, 2, 1, 6]

如果你想获得所有的唯一值,试试这个:

unique = df.groupby('Class')['Feature'].unique()

【讨论】:

df.groupby("Class").agg(list)

以上是关于如何获取功能的不同类的值列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java - 如何检查是不是在java中的不同类中单击了按钮?

NSArray,如何根据属性的值获取项目[重复]

如何将嵌套字典列表与它们的值中的公共键相加? [复制]

如何使用angularJS从自定义下拉列表中获取选定的值

如何在另一个选择列表的更改功能上更改选择列表的值? [复制]

如何从列表类型中获取模板类型? [复制]