Python - 保留日期列并使用字段名称翻转单元格

Posted

技术标签:

【中文标题】Python - 保留日期列并使用字段名称翻转单元格【英文标题】:Python - Keep date column and flip cells with field names 【发布时间】:2020-04-14 19:06:50 【问题描述】:

我正在处理熊猫数据框中的时间表。第一列是日期,其他列是班次:班次 1 班次 2、班次 3 等。班次下是员工:e1、e2、e3 等。

我目前的数据是这样的:

df
  calander_date s1  s2  s3  s4  s5  s6  s7  s8  s9
0 1/1/2020      e1  e3  e6  e2  Nan e7  e4  Nan e9
1 1/2/2020      e2  e8  e6  e4  Nan e5  e1  Nan e7
2 1/3/2020      e3  e10 e4  e2  Nan e7  e1  Nan e9
3 1/4/2020      Nan e10 e4  e2  e5  e7  e1  Nan e9

我的目标是将日期保留为第一列,并将员工作为字段名称,并在员工下进行轮班,如下所示:

df
  calander_date e1  e2  e3  e4  e5  e6  e7  e8  e9
0 1/1/2020      s1  s4  s2  s7  Nan s3  s6  Nan s9
1 1/2/2020      s7  s1  Nan s4  s6  s3  s9  s2  Nan
2 1/3/2020      s7  s4  s1  s3  Nan Nan s6  Nan s9
3 1/4/2020      s7  s4  Nan s3  s5  Nan s6  Nan s9

寻找一个聪明的方法来完成这个。

【问题讨论】:

【参考方案1】:

这是melt/stackunstack/pivot 的组合:

(df.set_index('calander_date').replace('Nan', np.nan)
   .stack().reset_index(name='employee')
   .pivot('calander_date', 'employee','level_1')
)

输出:

employee       e1  e10  e2   e3  e4   e5   e6  e7   e8   e9
calander_date                                              
1/1/2020       s1  NaN  s4   s2  s7  NaN   s3  s6  NaN   s9
1/2/2020       s7  NaN  s1  NaN  s4   s6   s3  s9   s2  NaN
1/3/2020       s7   s2  s4   s1  s3  NaN  NaN  s6  NaN   s9
1/4/2020       s7   s2  s4  NaN  s3   s5  NaN  s6  NaN   s9

【讨论】:

以上是关于Python - 保留日期列并使用字段名称翻转单元格的主要内容,如果未能解决你的问题,请参考以下文章

Python Dataframe:如果日期在其他两个日期列之间,则创建新列并设置为 1

熊猫合并具有不同名称的列并避免重复[重复]

翻转具有动态列并修复行的表 sql 服务器

Python通过列搜索

使用 dplyr 复制一列并为 R 中的新列添加前缀

将 Excel/OpenOffice 单元格名称与拖动竞争一起使用