【问题标题】:Python: How to convert Pandas Dataframe Row Values to individual columns?Python:如何将 Pandas Dataframe 行值转换为单个列?
【发布时间】:2021-05-26 14:16:21
【问题描述】:

我有以下数据框,其中包含不同时间间隔的不同作业开始和结束时间的数据。数据框的一小部分如下所示。

数据框(df):

result | job   |  time
START  | JOB0  |  1357  
START  | JOB2  |  2405
END    | JOB2  |  2379
START  | JOB3  |  4010
END    | JOB0  |  5209
END    | JOB3  |  6578
START  | JOB0  |  6000
END    | JOB0  |  6100

(注意 - 原始数据框有 5 个作业(JOB0 到 JOB4) 我想将result 列的值(STARTEND)转换为数据框中的各个列。

必需的数据帧(df2)

job  |  START  | END
JOB0 |  1357   | 5209
JOB2 |  2405   | 2379
JOB3 |  4010   | 6578
JOB0 |  6000   | 6100

代码
我尝试使用pivot_table 来实现它,但它提供了不需要的聚合值。

df2 = df.pivot_table('time', 'job','result')

代码输出

result |       END       |      START
job     
JOB0   |    5.000589e+08    5.000636e+08
JOB1   |    4.999141e+08    4.999188e+08
JOB2   |    5.001668e+08    5.001715e+08
JOB3   |    4.995190e+08    4.995187e+08
JOB4   |    5.003238e+08    5.003236e+08

我怎样才能获得所需的数据框?

【问题讨论】:

    标签: python pandas dataframe pandas-groupby pivot-table


    【解决方案1】:

    如果作业是唯一的,每个作业只有 1 个开始条目和 1 个结束条目,那么您可以使用它。否则使用 Chris A 的答案

    df.pivot_table(index=['job'], columns=['result'], values=['time'], aggfunc=np.max)
    

    【讨论】:

      【解决方案2】:

      您有重复的 jobJOB0 有 2 个不同的开始和结束时间),因此您还需要按累积计数 (groupby.cumcount) 进行旋转,因此索引是唯一的。之后,您可以通过降低累积计数级别来整理枢轴。

      df['idx'] = df.groupby(['job', 'result']).cumcount()
      
      (df.pivot(index=['job', 'idx'], columns='result', values='time')
        .sort_index(level=1)
        .droplevel(1)
        .reset_index()
        .rename_axis(None, axis=1)[['job', 'START', 'END']])
      

      [出]

          job  START   END
      0  JOB0   1357  5209
      1  JOB2   2405  2379
      2  JOB3   4010  6578
      3  JOB0   6000  6100
      

      【讨论】:

      • 这行得通,但我希望输出是一个具有 3 列的数据框,即:jobENDSTART。如何做到这一点?
      • 只是链接.reset_index() 应该这样做
      • Chaining .reset_index() 创建 4 列; resultjobENDSTARTresult 列包含数据帧的索引(0、1、2 等)。
      • "result" 是列索引名称 - 由 DataFrame.pivot 方法生成。您可以使用rename_axis 删除它以进一步整理。
      猜你喜欢
      • 2015-08-08
      • 2022-01-23
      • 2019-11-28
      • 2016-12-28
      • 2019-10-27
      • 1970-01-01
      • 2022-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多