代码之家  ›  专栏  ›  技术社区  ›  Brendan

最干净的方式垃圾箱使用熊猫。切

  •  0
  • Brendan  · 技术社区  · 7 年前

    这篇文章的目的主要是讨论,所以即使是松散的想法或绳子拉将不胜感激。我正试图收集一些数据进行分析,我想知道使用 Pandas.cut . 在某些情况下,我特别尝试将ICD-9诊断数据分类并使用 this list 作为起点。据我所知,一种常见的方法是:

    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',
                           ...}
    

    但是警察局。剪切函数似乎与我的字典不太协调。似乎有一种方法可以做到这一点,即使用数据帧作为具有最小值和最大值的查找表, shown here ,这似乎是一种可能性(以下示例):

    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开头,目前我正计划对其进行预处理,将其转换为范围的扩展,并以这种方式进行处理。例如,如果可能的非电子/视频代码范围为 range(0,1000) ,然后我可以将E转换为a range(1000, 2000) V变成了a range(2000, 3000) 这样我就可以为所有代码维护一个单独的查找表或字典,从中我可以切入我想要的任意多个箱子。这就是说,这种方法会导致对这些代码一目了然的理解能力下降,所以如果有更好的方法来处理这个问题,我愿意接受建议。

    1 回复  |  直到 7 年前
        1
  •  2
  •   HFBrowning    7 年前

    我只需要编写一个小的辅助函数。这里有一个想法:

    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)
    

    我同意字典(除了它本身是一种难以置信的快速、多功能的数据结构!)是一种非常好的方法,可以在代码中提供一些关于数据含义的上下文。如果我需要字典作为文档的一部分,我经常使用一个小的“黑盒”函数来完成实际工作。