这篇文章的目的主要是讨论,所以即使是松散的想法或字符串也会受到赞赏。我试图将一些数据用于分析,并且想知道使用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',
...}
但pd.cut函数似乎与我的字典相处得不好。使用数据框作为具有最小值和最大值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开头,目前我正计划对这些代码进行预处理,将它们转换为范围的扩展并以这种方式处理它们。例如,如果可能的非E / V代码的范围是range(0,1000)
,那么我可以将E转换为range(1000, 2000)
,将V&#39转换为range(2000, 3000)
所以我可以为所有代码维护一个查找表或字典,从中可以切入我想要的许多箱子。也就是说,这种方法会导致一目了然地理解这些代码的能力丧失,所以如果有更好的方法可以解决这个问题,我可以接受建议。
答案 0 :(得分:2)
我只想编写一个小辅助函数。这是一个想法:
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)
我同意字典(除了本身就是一个非常快速,多功能的数据结构!)是一种非常好的方法,可以在代码中提供有关数据意味着什么的一些上下文。我经常使用一个小的黑盒子#34;如果我需要一本字典作为我的文档的一部分,我可以完成实际的工作。