如何将多列及其标题转换为行

时间:2019-06-06 15:35:16

标签: python pandas dataframe melt

我有一个包含28列的数据框,其中27个是日期时间列,其中1个是ID列。我需要将数据集转换为总共3列,其中有一列datatime列,第二列具有从中导出日期时间的原始标题,第三列具有从中获得日期时间的原始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 

我的理解是,可以通过熊猫melt来完成此任务,但是将27个datetime列与一个ID列结合使用是否可行?

我如何在这么多个维度上完成这项任务?

1 个答案:

答案 0 :(得分:2)

使用融化:

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

您还可以用'_c'连字符27列,然后创建类似于的列表

list = [如果c.endwith('_ c'),则为df中的c的c],并在melt函数中引用列表