[英]pandas merge columns and adding the original column
我有一个带有价值预测的 Dataframe。
第一列是精确值,每个新列是未来一周。 每周都会添加一个新行。 结果,我有以下示例表:
Index W1 W2 W3 W4
1. 5 7 4 9
2. 8 7 10 11
等等。
我希望这些值都在一行中,并且我希望其他行是提前几周的数量(在我的情况下正是值的列索引)。
我的表应该是这样的:
Index Value Week
1. 5 1
2. 7 2
3. 4 3
4. 9 4
5. 8 1
6. 7 2
7. 10 3
8. 11 4
我正在使用 python 并且刚刚声明了 dataframe。 如何才能做到这一点?
这是melt
的变体:
(df.melt(id_vars='Index', value_name='Value')
.assign(Week=lambda d: d['variable'].str[1:].astype(int))
.drop(columns='variable')
.sort_values('Index')
)
output:
Index Value Week
0 1.0 5 1
2 1.0 7 2
4 1.0 4 3
6 1.0 9 4
1 2.0 8 1
3 2.0 7 2
5 2.0 10 3
7 2.0 11 4
您可以使用stack
:
df.columns = [c.strip('W') for c in df.columns]
res = (df.set_index('Index').stack().droplevel(level=0).reset_index()).rename(columns = {0:'Value'})
印刷:
index Value
0 1 5
1 2 7
2 3 4
3 4 9
4 1 8
5 2 7
6 3 10
7 4 11
首先使用强制转换为整数rename
列名称并删除W
,然后通过DataFrame.stack
重塑,并通过Series.droplevel
、 Series.rename_axis
和Series.reset_index
进行一些数据清理:
df = (df.rename(columns= lambda x: int(x.replace('W','')))
.stack()
.droplevel(0)
.rename_axis('Week')
.reset_index(name='Value'))
print (df)
Week Value
0 1 5
1 2 7
2 3 4
3 4 9
4 1 8
5 2 7
6 3 10
7 4 11
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.