首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:如何将Pandas Dataframe行值转换为单独的列?

Python:如何将Pandas Dataframe行值转换为单独的列?
EN

Stack Overflow用户
提问于 2021-02-24 17:16:46
回答 2查看 118关注 0票数 2

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

数据帧(Df):

代码语言:javascript
运行
复制
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)我要将这些值(STARTEND)列result作为数据帧中的单个列。

所需数据帧(Df2)

代码语言:javascript
运行
复制
job  |  START  | END
JOB0 |  1357   | 5209
JOB2 |  2405   | 2379
JOB3 |  4010   | 6578
JOB0 |  6000   | 6100

代码

我尝试使用pivot_table

但它给出了不需要的聚合值。df2 = df.pivot_table('time', 'job','result')

代码输出

代码语言:javascript
运行
复制
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

如何获取所需的数据帧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-24 17:29:19

你有重复的job(JOB0有2个不同的开始和结束时间),因此您还需要通过累积计数(groupby.cumcount),因此索引是唯一的。您可以在之后通过删除累积计数级别来清理轴心。

代码语言:javascript
运行
复制
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']])

输出

代码语言:javascript
运行
复制
job  START   END
0  JOB0   1357  5209
1  JOB2   2405  2379
2  JOB3   4010  6578
3  JOB0   6000  6100
票数 7
EN

Stack Overflow用户

发布于 2021-02-24 17:41:54

如果作业是唯一的,即每个作业只有1个start条目和1个end条目,那么您可以使用这个。否则,请使用Chris A的答案

代码语言:javascript
运行
复制
df.pivot_table(index=['job'], columns=['result'], values=['time'], aggfunc=np.max)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66347877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档