Python:如何将 Pandas Dataframe 行值转换为单个列?

Ish*_*tta 2 python pivot-table dataframe pandas pandas-groupby

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

数据框(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
Run Code Online (Sandbox Code Playgroud)

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

所需数据框(df2)

job  |  START  | END
JOB0 |  1357   | 5209
JOB2 |  2405   | 2379
JOB3 |  4010   | 6578
JOB0 |  6000   | 6100
Run Code Online (Sandbox Code Playgroud)

代码
我尝试使用 a 实现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
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*s A 7

您有重复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']])
Run Code Online (Sandbox Code Playgroud)

[出去]

    job  START   END
0  JOB0   1357  5209
1  JOB2   2405  2379
2  JOB3   4010  6578
3  JOB0   6000  6100
Run Code Online (Sandbox Code Playgroud)