如何将几列堆叠成一列,但保留一列 python
How to stack several column into one column but keep a column as it is in python
假设我有这个数据框
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')
对列 A
使用 DataFrame.set_index
:
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
假设我有这个数据框
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')
对列 A
使用 DataFrame.set_index
:
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