python - 如何为 Pandas DataFrame 中的所有唯一值设置相同的频率?
问题描述
我有一个 Pandas DataFrame,它有 2 列:一列用于类别 (PROBLEM_TYPE),另一列用于类别描述。显然,每个类别的描述值计数是不同的,但由于我计划基于此 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
提前致谢。
解决方案
您可以执行以下操作:
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)
有关如何洗牌数据帧的讨论,请参见此处。
推荐阅读
- angular - 如何使用角材料组件创建 Html 电子邮件模板
- spring - 如何从弹簧安全成功处理程序将值传递给 Angular index.html
- html - 响应式 3 列下拉菜单
- ios - 从 Document 目录加载多个图像时 UICollectionView 卡住
- hadoop - 关于在 hive 表的 csv 表中填充数据
- python-2.7 - Perl 到 Python 脚本散列
- python-3.x - 如何在python中并排比较两个Pdf文件
- c# - 如何获取带有文件完整路径的字符串以复制文件
- javascript - 使用没有 PassportJS 的 ExpressJS 和 Angular 进行身份验证
- git - git log --pretty=format 末尾的百分比符号