我有一个熊猫DataFrame,它有两列:一列用于类别(PROBLEM_TYPE),另一列用于类别描述。显然,描述的值计数对于每个类别是不同的,但是由于我计划基于这个DataFrame训练一个模型,所以我尝试为每个类别设置相同的值计数。这样我的模型会更准确。
DataFrame:
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种不同的问题类型(类别),每种类型都有不同的值计数。我的问题是如何为所有问题类型设置相同的值计数。例如,每个问题类型在DataFrame中的值计数都是最小的(即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提前谢谢。
发布于 2019-10-15 03:20:53
您可以执行以下操作:
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。
https://stackoverflow.com/questions/58382798
复制相似问题