Python 如何从dataframe中提取列并将其附加到行,同时保持其他列的完整性
如何从dataframe中提取列并将其附加到行,同时保持其他列不变 这是我的示例数据集Python 如何从dataframe中提取列并将其附加到行,同时保持其他列的完整性,python,pandas,Python,Pandas,如何从dataframe中提取列并将其附加到行,同时保持其他列不变 这是我的示例数据集 import pandas as pd import numpy as np df = pd.DataFrame({'ID': np.arange(0,5), 'sample_1' : [5,6,7,8,9], 'sample_2' : [10,11,12,13,14], 'group_id' : [
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID': np.arange(0,5),
'sample_1' : [5,6,7,8,9],
'sample_2' : [10,11,12,13,14],
'group_id' : ["A","B","C","D","E"]})
我想要的输出是:
df2 = pd.DataFrame({'ID': [0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
'sample_1' : [5,6,7,8,9,10,11,12,13,14],
'group_id' : ["A","B","C","D","E","A","B","C","D","E"]})
我曾尝试使用pd.concat
对数据帧和concat进行切片,但它给出了NaN值
我的原始数据集很大。您可以使用
stack
:将索引设置为您不想修改的列,调用stack,按“sample”列排序,然后重置索引:
df.set_index(['ID','group_id']).stack().sort_values(0).reset_index([0,1]).reset_index(drop=True)
ID group_id 0
0 0 A 5
1 1 B 6
2 2 C 7
3 3 D 8
4 4 E 9
5 0 A 10
6 1 B 11
7 2 C 12
8 3 D 13
9 4 E 14
您正在寻找的函数称为
melt
例如:
df2 = pd.melt(df, id_vars=['ID', 'group_id'], value_vars=['sample_1', 'sample_2'], value_name='sample_1')
df2 = df2.drop('variable', axis=1)
使用:
res = pd.wide_to_long(df, stubnames='sample_', i='ID', j='group_id')
res.index = res.index.droplevel(1)
res = res.rename(columns={'sample_': 'sample_1'}).reset_index()
print(res)
ID group_id sample_1
0 0 A 5
1 1 B 6
2 2 C 7
3 3 D 8
4 4 E 9
5 0 A 10
6 1 B 11
7 2 C 12
8 3 D 13
9 4 E 14