我有一个数据框,其中包含我需要分成的代码范围,这些代码范围中的每个代码都分为几行。有些代码包含字母,这又增加了另一层复杂性。
code_range_start code_range_end ccs \
0 61000 61055 1
1 61105 61106 1
2 61108 61130 1
3 61150 61156 1
4 61250 61315 1
5 61320 61323 1
6 61340 61340 1
7 61345 61440 1
8 61470 61490 1
9 61510 61516 1
10 61518 61530 1
11 61534 61545 1
12 61556 61557 1
13 61570 61576 1
14 61582 61596 1
15 61598 61608 1
16 61615 61616 1
17 61712 61735 1
18 61880 61880 1
19 62161 62164 1
20 0169T 0169T 2
21 61107 61107 2
22 61210 61210 2
23 62160 62160 2
24 62180 62258 2
25 0202T 0202T 3
26 0274T 0275T 3
正在使用的数据集是与单个医疗石斑鱼代码(CCS ID)相关联的医疗CPT代码的CSV和该代码的描述:
https://www.hcup-us.ahrq.gov/toolssoftware/ccs_svcsproc/ccssvcproc.jsp
我确定了范围内有字母的行。没有字母的那些我可以通过引用以下内容来完成:
Add rows to dataframe each day between a range of two columns
我的代码如下:
df_noletters_full = pd.concat([pd.Series(r.ccs,
range(r.code_range_start, r.code_range_end + 1))
for r in df_noletters.itertuples()]) \
.reset_index()
df_noletters_full.columns = ['code','ccs']
对于包含字母的范围,我能够确定该字母是在开头还是结尾,删除该字母并将其提取到一个新的“字母”列中,以在生成范围之后将其附加回去。
我遇到的问题是,当我尝试使用提取的字母作为第二列在数字范围上执行相同的操作时,上面的代码不喜欢第二列。当我跑步时:
df_letters_starts_with_full = pd.concat([pd.Series(r.ccs, r.letter,
range(r.code_range_start_digits_only, r.code_range_end_digits_only + 1))
for r in df_letters_starts_with.itertuples()]) \
.reset_index()
我收到以下错误:
TypeError: Index(...) must be called with a collection of some kind, 'C' was passed
当我尝试保留包含组ID和“ ccs描述”列的“ ccs”列时,实际上在数字范围上也发生了相同的错误。我删除了说明列以使其起作用,并在'ccs'ID之后加入了单独的数据框。
我需要保留“ ccs”列以供以后连接,然后保留“ letter”列以将其附加回代码。当前代码只是不喜欢第二列,我认为这是因为它是一个系列,但是我不确定是否可以做一些保留呢?
我唯一的想法是将“ ccs” ID和“字母”列连接为一,使用该单列运行代码,然后将其解析回两列。我敢肯定这会很好,但是我认为必须有一种更清洁的方法来做到这一点?
有关其他参考,该网站提供了使用相同文件的优秀教程,但全部位于R:
http://healthydatascience.com/ahrq_ccs_cpt.html
关于如何更改现有代码以保留该列的任何提示,或者最好的选择是将两者串联成一列,然后在之后将其拆分出去?
谢谢!