Pandas 拆分并连接数据帧
我有一个数据框,看起来像这样:Pandas 拆分并连接数据帧,pandas,Pandas,我有一个数据框,看起来像这样: >>>df = pd.DataFrame({ 'id': [i for i in range(5)], '1': ['a', 'b', 'c', 'd', 'e'], '2': ['f', 'g', 'h', 'i', 'g'] }) >>>df id 1 2 0 0 a f 1 1 b g 2 2 c h 3
>>>df = pd.DataFrame({
'id': [i for i in range(5)],
'1': ['a', 'b', 'c', 'd', 'e'],
'2': ['f', 'g', 'h', 'i', 'g']
})
>>>df
id 1 2
0 0 a f
1 1 b g
2 2 c h
3 3 d i
4 4 e g
我想将此数据帧转换为以下数据帧
>>>df_concatenated
id val
1 0 a
1 1 b
1 2 c
1 3 d
1 4 e
2 0 f
2 1 g
2 2 h
2 3 i
2 4 g
一种方法是使钯熔化
pd.melt(df, id_vars=['id'], value_vars=['1','2']).set_index('variable',append=True)
另一种是通过.loc
访问器拆分并连接。很长,但它有效
res1=df.iloc[:,[0,2]]
res1.columns=['id','val']
res=df.iloc[:,:2]
res.columns=['id','val']
res2=pd.concat([res1,res])
res2
variable id value
0 1 0 a
1 1 1 b
2 1 2 c
3 1 3 d
4 1 4 e
5 2 0 f
6 2 1 g
7 2 2 h
8 2 3 i
9 2 4 g
一种方法是使钯熔化
pd.melt(df, id_vars=['id'], value_vars=['1','2']).set_index('variable',append=True)
另一种是通过.loc
访问器拆分并连接。很长,但它有效
res1=df.iloc[:,[0,2]]
res1.columns=['id','val']
res=df.iloc[:,:2]
res.columns=['id','val']
res2=pd.concat([res1,res])
res2
variable id value
0 1 0 a
1 1 1 b
2 1 2 c
3 1 3 d
4 1 4 e
5 2 0 f
6 2 1 g
7 2 2 h
8 2 3 i
9 2 4 g
您可以尝试以下方法:
df = df.rename({"1":"val"},axis=1)
df_temp = df[["id","2"]]
df_temp = df_temp.rename({"2":"val"},axis=1)
df.drop("2",axis=1,inplace=True)
out_df = pd.concat([df,df_temp],axis=0).reset_index(drop=True)
print(out_df)
输出:
id val
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e
5 0 f
6 1 g
7 2 h
8 3 i
9 4 g
您可以尝试以下方法:
df = df.rename({"1":"val"},axis=1)
df_temp = df[["id","2"]]
df_temp = df_temp.rename({"2":"val"},axis=1)
df.drop("2",axis=1,inplace=True)
out_df = pd.concat([df,df_temp],axis=0).reset_index(drop=True)
print(out_df)
输出:
id val
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e
5 0 f
6 1 g
7 2 h
8 3 i
9 4 g
非常感谢,pd.melt(df,id_vars=['id'],value_vars=['1','2'])有一点变化非常有效。设置索引('variable')。重命名_轴(None)非常感谢,pd.melt(df,id_vars=['id'],value_vars=['1','2'])。设置索引('variable')。重命名_轴(None)