繁体   English   中英

使用Pandas.cut进行Bin的最干净方法

[英]Cleanest way to bin using Pandas.cut

这篇文章的目的主要是讨论,因此,即使是松散的想法或需要提拔的条件也将受到赞赏。 我正在尝试对某些数据进行Pandas.cut分析,并且想知道使用Pandas.cut数据的最干净方法是什么。 在某些情况下,我专门尝试将ICD-9诊断数据归类,并以该列表为起点。 从我正在阅读的内容来看,执行此操作的常见方法是这样的:

break_points = [0, 139, 239, ...]
labels = ['infectious and parasitic diseases', 'neoplasms', 'endocrine diseases', ...]
df['diag_codes_binned'] = pd.cut(df['diag_codes'],
                                 bins=break_points,
                                 labels=labels)

我认识到这是实现此功能的完美方法,但是我不喜欢目视检查代码并确定哪些范围与哪个标签对齐是多么困难。 我正在探索使用像这样的字典:

diagnosis_code_dict = {139: 'infectious and parasitic diseases',
                       239: 'neoplasms',
                       279: 'endocrine diseases',
                       ...}

但是pd.cut函数似乎与我的字典相处得不太好。 似乎有一种方法可以使用数据帧作为具有最小值和最大值的查找表来执行此操作,如此处所示 ,这似乎是一种可能性(下面的示例):

In [187]: lkp
Out[187]:
   Min  Max  Val
0    1   99  AAA
1  100  199  BBB
2  200  299  CCC
3  300  399  DDD

最后,对于要通过最佳方式处理的数据集,我还有更多考虑。 一些诊断代码以V或E开头,目前我正计划对其进行预处理,以将其转换为范围的扩展并以这种方式进行处理。 例如,如果可能的非-E / V代码范围是range(0,1000)然后我可以将E转换的成range(1000, 2000)和V的成range(2000, 3000)这样我可以保持一个用于所有代码的查找表或字典,我可以从中切成任意数量的垃圾箱。 就是说,这种方法导致对这些代码的一目了然的了解,因此,如果有更好的方法可以解决这个问题,我将公开建议。

我只是写一个小的辅助函数。 这是一个主意:

import pandas as pd

def bin_helper(code_dict):
    break_points = [0] + sorted(code_dict) #0 added for lower bound on binning
    labels = [code_dict[value] for value in sorted(code_dict)]
    return break_points, labels

# Setting up some minimal reproducible code...
data = {'diag_codes': range(1, 300),
        'diag_codes_binned': ''}
df = pd.DataFrame.from_dict(data)
diag_code_dict = {139: 'infectious and parasitic diseases',
                  239: 'neoplasms',
                  279: 'endocrine diseases'}

# Run the function and drop it into pandas.cut
bins, labels = bin_helper(diag_code_dict)
df['diag_codes_binned'] = pd.cut(df['diag_codes'],
                                 bins=bins,
                                 labels=labels)

我同意字典(就其本身而言,是一个快速,通用的数据结构!)是一种非常不错的方式,可以在代码中提供有关数据含义的上下文。 如果我需要字典作为我的文档的一部分,我经常使用一个小的“黑匣子”功能来完成实际工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM