【问题标题】:How to stack several column into one column but keep a column as it is in python如何将几列堆叠成一列但在python中保持一列
【发布时间】:2021-12-07 08:44:48
【问题描述】:
假设我有这个数据框
| A |
B |
C |
| 1 |
p |
q |
| 1 |
|
q |
| 2 |
p |
|
| 2 |
p |
q |
我想将 B 列和 C 列堆叠成一列(比如说 D 列),但保持 A 列不变。如何得到这个?
这是我想要的预期输出
| A |
D |
| 1 |
p |
| 1 |
q |
| 1 |
q |
| 2 |
p |
| 2 |
p |
| 2 |
q |
注意:据我所知,要将 B 列和 C 列堆叠到 D 列中,我可以使用以下代码:
df_temp = df[['B','C']]
df_temp = df_temp.stack().reset_index(name='D')
【问题讨论】:
标签:
python
pandas
dataframe
stack
【解决方案1】:
将DataFrame.set_index 与A 列一起使用:
df_temp = (df.set_index('A')[['B','C']]
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='D'))
print (df_temp)
A D
0 1 p
1 1 q
2 1 q
3 2 p
4 2 p
5 2 q
或者:
df_temp = (df.melt(id_vars='A',value_vars=['B','C'], value_name='D')
.drop('variable', axis=1)
.dropna(subset=['D'])
.sort_values('A', ignore_index=False))
print (df_temp)
A D
0 1 p
4 1 q
5 1 q
2 2 p
3 2 p
7 2 q