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)