如何将多列及其 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 函数中引用列表
我有一个包含 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 函数中引用列表