代码之家  ›  专栏  ›  技术社区  ›  swifty

熊猫-有条件地存储输出

  •  3
  • swifty  · 技术社区  · 6 年前

    我有一个df.apply,它返回一个键/值如下的序列(我们称它为A列):

             Col. A
    40237    1.871111
    40239    1.280556
    40240    1.784167
    40241    0.049167
    40243    0.011389
    40244    0.660278
    40245    1.512500
    

    我想用一个单独列(B列)的值将这些值保存到不同的列中。

    B列可以包含6个不同的字符串(示例中为4个)。

             Col. B
    40237    Open
    40239    Open
    40240    In Progress
    40241    Closed
    40243    Waiting
    40244    In Progress
    40245    Waiting
    

    我想根据列b的值将列a的值保存到4列中的一列。

    最终结果是:

             Col. A      Col. B        Open Time   In Progress Time  Closed Time Waiting Time
    40237    1.871111    Open          1.871111    np.nan            np.nan      np.nan
    40239    1.280556    Open          1.280556    np.nan            np.nan      np.nan
    40240    1.784167    In Progress   np.nan      1.784167          np.nan      np.nan
    40241    0.049167    Closed        np.nan      np.nan            0.049167    np.nan
    40243    0.011389    Waiting       np.nan      np.nan            np.nan      0.011389
    40244    0.660278    In Progress   np.nan      0.660278          np.nan      np.nan
    40245    1.512500    Waiting       np.nan      np.nan            np.nan      1.512500
    

    现在我最大的努力是:

    for key in output.index:
        df.loc[key,(df['Col. B'] + " Time")] = output.loc[key]
    

    但是我的错误是 ValueError: cannot index with vector containing NA / NaN values 是的。我不知道为什么,虽然我的专栏里有很多南的。

    1 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    使用 join 属于 pivot ED数据帧 add_suffix 以下内容:

    df = df.join(pd.pivot(df.index, df['Col. B'], df['Col. A']).add_suffix(' Time'))
    

    另一个解决方案是pivot by set_index 具有 unstack 以下内容:

    df = df.join(df.set_index('Col. B', append=True)['Col. A'].unstack().add_suffix(' Time'))
    
    print (df)
             Col. A       Col. B  Closed Time  In Progress Time  Open Time  \
    40237  1.871111         Open          NaN               NaN   1.871111   
    40239  1.280556         Open          NaN               NaN   1.280556   
    40240  1.784167  In Progress          NaN          1.784167        NaN   
    40241  0.049167       Closed     0.049167               NaN        NaN   
    40243  0.011389      Waiting          NaN               NaN        NaN   
    40244  0.660278  In Progress          NaN          0.660278        NaN   
    40245  1.512500      Waiting          NaN               NaN        NaN   
    
           Waiting Time  
    40237           NaN  
    40239           NaN  
    40240           NaN  
    40241           NaN  
    40243      0.011389  
    40244           NaN  
    40245      1.512500