我有一个 DataFrame
df_things
看起来像这样,我想在训练之前预测分类的质量
A B C CLASS
-----------------------
al1 bal1 cal1 Ship
al1 bal1 cal1 Ship
al1 bal2 cal2 Ship
al2 bal2 cal2 Cow
al3 bal3 cal3 Car
al1 bal2 cal3 Car
al3 bal3 cal3 Car
我想按类对行进行分组,以便我了解特征的分布。我这样做(例如,在“B”列上),
df_B = df_things.groupby('CLASS').B.value_counts()
这给了我结果
CLASS B
-------------
ship bal1 2
bal2 1
cow bal2 2
car bal2 1
bal3 2
我想要的是仅可视化具有多个值的组,使其看起来像这样:| ||我有点卡住了,有什么想法吗?
CLASS B
-------------
ship bal1 2
bal2 1
car bal2 1
bal3 2
I'm a little bit stuck, so any ideas?
当然,我可以帮助解决这个问题。可以使用 Pandas 的
groupby
和
filter
函数来实现这一点。以下是如何操作:
import pandas as pd
# 创建示例 DataFrame
df_things = pd.DataFrame({
'A': ['al1', 'al1', 'al1', 'al2', 'al3', 'al1', 'al3'],
'B': ['bal1', 'bal1', 'bal2', 'bal2', 'bal3', 'bal2', 'bal3'],
'C': ['cal1', 'cal1', 'cal2', 'cal2', 'cal3', 'cal3', 'cal3'],
'CLASS': ['Ship', 'Ship', 'Ship', 'Cow', 'Car', 'Car', 'Car']
})
# 按“CLASS”和“B”列对 DataFrame 进行分组,并获取每个组的大小
df_grouped = df_things.groupby(['CLASS', 'B']).size()
# 过滤组,仅保留“CLASS”列中具有多个唯一值的组
df_filtered = df_grouped.groupby('CLASS').filter(lambda x: len(x) > 1)
# 将结果转换为所需的格式
df_result = df_filtered.reset_index(name='count')
print(df_result)
这将打印以下输出:
CLASS B count
0 Car bal2 1
1 Car bal3 2
2 Ship bal1 2
3 Ship bal2 1
在这个代码中:
- 我们首先按“CLASS”和“B”列对 DataFrame 进行分组。
-
然后,我们使用
groupby('CLASS').filter()
函数仅保留“CLASS”列中具有多个唯一“B”值的组。 -
最后,我们使用
reset_index()
函数将结果转换为所需的格式。
此代码将为提供具有多个唯一特征值的组列表,从而能够进行需要的可视化。
标签:python,pandas,compare,unique,pandas-groupby From: 53979178