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

标签 python python-3.x pandas

我正在处理 Pandas 数据框中的时间表。第一列是日期,其他列是类次:类次 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

寻找一种巧妙的方法来实现这一点。

最佳答案

这是melt/stack的组合和 unstack/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 - 保留日期列并使用字段名称翻转单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61215310/

相关文章:

python - 如何将值设置为与最后一项中的值相同?

python - 使用Python制作矩阵(特征矩阵?)

python - 获取与模式不匹配的模式之前的行

python - pip 安装并运行 git repo

python - Spark 创建数据帧,其中包含整数和 float 混合的列

python-3.x - Airflow 日志 BrokenPipeException

python - 如何删除数据集中的重复值 : python

python - pandas.concat() 不填充列

javascript - Javascript 和 Python 中的异或运算结果不一致

Python 返回值?