首页 > 解决方案 > 如何将多列及其标题转换为行

问题描述

我有一个包含 28 列的数据框,其中 27 个是日期时间列,其中 1 个是 ID 列。我需要将数据集转换为 3 个总列,其中有一个数据时间列,第二个列具有从中派生日期时间的原始标题,第三列具有派生日期时间的原始 ID。

非转换数据示例:

ID Buy    Sell     Hold 
1  2/2/17 2/3/17   2/4/17
2  3/2/17 3/3/17   3/4/17
3  4/2/17 4/3/17   4/4/17

转换数据示例:

Date   Activity ID
2/2/17 Buy      1
2/3/17 Sell     1
2/4/17 Hold     1
3/2/17 Buy      2
3/3/17 Sell     2
3/4/17 Hold     2
4/2/17 Buy      3 
4/3/17 Sell     3 
4/4/17 Hold     3 

我的理解是这个任务可以用 pandas 来完成melt,但是用 27 个日期时间列加上一个 ID 列是否可行?

这么多维度如何完成这个任务?

标签: pythonpandasdataframemelt

解决方案


使用熔体:

df_melt=df.melt(id_vars='ID',value_vars=['Buy','Sell','Hold'],var_name='Activity',value_name='Date')

您还可以使用 '_c' 将 27 列连字符连接起来,例如然后创建一个类似于

list=[c for c in df if c.endwith('_c')] 并在 melt 函数中引用列表


推荐阅读