【问题标题】:pandas : merge two columns, every other rowpandas:合并两列,每隔一行
【发布时间】:2017-03-30 00:17:23
【问题描述】:

我有以下熊猫df:

      original      mean
   0  0.000000  0.065500
   1  0.131000  0.135890
   2  0.140779  0.144875
   3  0.148971  0.150029
   4  0.151088  0.144309

如何将 2 列合并成这样:

      original
   0  0.000000
   1  0.065500
   2  0.131000
   3  0.135890
   4  0.140779  
   5  0.144875
   6  0.148971  
   7  0.150029
   8  0.151088  
   9  0.144309

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用stack()方法:

    In [2]: df
    Out[2]:
       original      mean
    0  0.000000  0.065500
    1  0.131000  0.135890
    2  0.140779  0.144875
    3  0.148971  0.150029
    4  0.151088  0.144309
    
    In [3]: df.stack()
    Out[3]:
    0  original    0.000000
       mean        0.065500
    1  original    0.131000
       mean        0.135890
    2  original    0.140779
       mean        0.144875
    3  original    0.148971
       mean        0.150029
    4  original    0.151088
       mean        0.144309
    dtype: float64
    
    In [4]: df.stack().reset_index(level=[0,1], drop=True)
    Out[4]:
    0    0.000000
    1    0.065500
    2    0.131000
    3    0.135890
    4    0.140779
    5    0.144875
    6    0.148971
    7    0.150029
    8    0.151088
    9    0.144309
    dtype: float64
    

    【讨论】:

      【解决方案2】:

      您可以在值上调用reshape 并构造另一个df:

      In [7]:
      pd.DataFrame(data=df.values.reshape(df.shape[0]*2,-1), columns=['original'])
      
      Out[7]:
         original
      0  0.000000
      1  0.065500
      2  0.131000
      3  0.135890
      4  0.140779
      5  0.144875
      6  0.148971
      7  0.150029
      8  0.151088
      9  0.144309
      

      时间

      在您的示例数据集上:

      In [8]:
      %timeit df.stack().reset_index(level=[0,1], drop=True)
      %timeit pd.DataFrame(data=df.values.reshape(df.shape[0]*2,-1), columns=['original'])
      
      1000 loops, best of 3: 820 µs per loop
      1000 loops, best of 3: 446 µs per loop
      

      在 numpy 数组上的整形速度几乎是这里的两倍

      【讨论】:

        猜你喜欢
        • 2020-08-18
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多