如何为 Pandas DataFrame 中发现的所有唯一值设置相同的频率?

2024-03-28 15:47:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas数据框,它有两列:一列用于category(PROBLEM\u TYPE),另一列用于category的描述。显然,每个类别的描述值计数是不同的,但是由于我计划基于这个数据帧训练一个模型,所以我尝试为每个类别设置相同的值计数。这样我的模型会更准确

数据帧:

filtered_df.head()

    PROBLEM_TYPE    DESCRIPTION
0   problem_type1   blabla...
1   problem_type1   blablablabla...
2   problem_type3   bla...
3   problem_type7   blablabloblo...
4   problem_type2   blobloble...

这是我调用value_counts()函数时得到的结果:

filtered_df["PROBLEM_TYPE"].value_counts()

problem_type1            141887
problem_type2             21663
problem_type3             19349
problem_type4             15710
problem_type5              5229
problem_type6              5161
problem_type7              4682
problem_type8              3672
problem_type9              3296
problem_type10             3131
Name: PROBLEM_TYPE, dtype: int64

正如您所看到的,有10种不同的问题类型(类别),每种类型都有不同的值计数。我的问题是如何为所有问题类型设置相同的值计数。例如,每个问题类型在数据帧中具有最小值计数(即3131)

换言之,如何将每个类别的频率设置为相同,以便下次运行value_counts()函数时,它看起来像这样:

filtered_df["PROBLEM_TYPE"].value_counts()

problem_type1              3131
problem_type2              3131
problem_type3              3131
problem_type4              3131
problem_type5              3131
problem_type6              3131
problem_type7              3131
problem_type8              3131
problem_type9              3131
problem_type10             3131
Name: PROBLEM_TYPE, dtype: int64

提前谢谢


Tags: 数据类型dfvaluetype类别filtered计数
1条回答
网友
1楼 · 发布于 2024-03-28 15:47:02

您可以执行以下操作:

mi = df["PROBLEM_TYPE"].value_counts().min()
df_filtered = df.sample(frac=1).groupby("PROBLEM_TYPE").head(mi)

在这个解决方案中有两个步骤,找到具有最小计数的"PROBLEM_TYPE"

mi = df["PROBLEM_TYPE"].value_counts().min()

然后洗牌数据帧行并获取每组的第一个mi:

df_filtered = df.sample(frac=1).groupby("PROBLEM_TYPE").head(mi)

有关如何洗牌数据帧的讨论,请参见here

相关问题 更多 >