将两列范围内的每个数字的行添加到数据框,同时保留其他多列

时间:2018-10-31 16:29:44

标签: python pandas dataframe

我有一个数据框,其中包含我需要分成的代码范围,这些代码范围中的每个代码都分为几行。有些代码包含字母,这又增加了另一层复杂性。

      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

关于如何更改现有代码以保留该列的任何提示,或者最好的选择是将两者串联成一列,然后在之后将其拆分出去?

谢谢!

0 个答案:

没有答案