繁体   English   中英

pandas 合并列并添加原始列

[英]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.droplevelSeries.rename_axisSeries.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM