【问题标题】:Pandas split row in multiple row熊猫在多行中拆分行
【发布时间】:2020-12-26 19:51:23
【问题描述】:

考虑下面一个带有标题和一行作为输入的DataFrame。输入行需要根据值之间的空间分成两行,或者第二个值需要转到第二行。所以在输出中我们需要两行..

输入1:

 Age  Gender Coverage-Status Total-Paid Benefit-Date Outstanding-Reserve Waiver-Reserve Coverage-Code
 31 26  M F    AC CC           10,000     2/15/2011      NaN                4,743         081 010 

需要输出:

Age Gender Coverage-Status Total-Paid Benefit-Date Outstanding-Reserve Waiver-Reserve Coverage Code
31   M     AC              10,000     2/15/2011      NaN                4,743         081 
26   F     CC                                                                         010

我现在卡在这个问题上,这可能吗?

我正在尝试这样的事情:

ad['Age'] = ad.Age.str.split(expand = True).stack()

但是这个好像不行……

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    对不起,没有足够的积分来评论。您可以先按列拆分数据框,然后拆分列重复的行,然后重新加入保存的数据框,即

    input1_a = input1[['Total-Paid', 'Benefit-Date', 'Outstanding-Reserve', 'Waiver-Reserve']].copy()
    input1_b = input1[['Age', 'Gender' ,'Coverage-Status','Coverage-Code']].copy()
    

    Yatu 放弃了之前的答案,但这里有一个函数可以拆分多个列。 zouweilin 于 2018 年 9 月 6 日发表评论。不像 Yatu 的解决方案那么优雅,但是......

    https://gist.github.com/jlln/338b4b0b55bd6984f883

    然后

    input1_new = pd.concat([input1_a,input1_b], axis = 1)
    

    然后重新排列列

    input1_new = input1_new[['Age', 'Gender' ,'Coverage-Status','Total-Paid', 'Benefit-Date', 'Outstanding-Reserve', 'Waiver-Reserve', 'Coverage-Code']]
    

    【讨论】:

      【解决方案2】:

      试试:

      # iterate ONLY over columns subjected to split - I assumed it's all columns
      for col in df.columns:
          df[col]=df[col].str.split(" ")
      res = df.stack().explode().reset_index(level=0, drop=True).to_frame()
      
      res["id"] = res.groupby(level=0).cumcount()
      res = res.set_index("id", append=True).unstack(level=0)
      res.columns = res.columns.droplevel()
      

      输出:

         Age Benefit-Date Coverage-Code Coverage-Status Gender Outstanding-Reserve  \
      id                                                          
      0   31  2/15/2011    081           AC              M      NaN
      1   26  NaN          010           CC              F      NaN
      
         Total-Paid Waiver-Reserve
      id
      0   10,000     4,743
      1   NaN        NaN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-19
        • 2016-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 2022-06-11
        • 2018-11-16
        相关资源
        最近更新 更多