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

Posted

技术标签:

【中文标题】Python:如何将 Pandas Dataframe 行值转换为单个列?【英文标题】:Python: How to convert Pandas Dataframe Row Values to individual columns? 【发布时间】: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

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

【问题讨论】:

【参考方案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 删除它以进一步整理。

以上是关于Python:如何将 Pandas Dataframe 行值转换为单个列?的主要内容,如果未能解决你的问题,请参考以下文章

肝了3天,整理了90个Pandas案例!

肝了3天,整理了90个Pandas案例!

“未指定驱动程序名称”将 pandas 数据帧写入 SQL Server 表

将函数应用于 Pandas.DataFrame 中两列的每个组合的更好方法

如何用pandas将某列one-hot编码后,修改原dataframe

如果数据类型错误,如何跳过加载到 Pandas 数据框的 excel 文件的行(检查类型)