如何将多列及其 headers 转换为行

how to convert multiple columns and their headers into rows

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

non-transformed 数据示例:

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 列是否可行?

我如何完成如此多维度的任务?

使用融化:

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 函数中引用列表