如何获取功能的不同类的值列表? [复制]
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中的不同类中单击了按钮?