在另一行的行之间插入列的行

时间:2018-10-24 07:42:39

标签: python pandas

我有一个由两列组成的df,如下所示:

    rows    A     B

    0       1     7
    1       9     11
    2       20    30
    3       32    35

我想创建另一列,以便将A列的每一行插入到B列的两行之间。

输出看起来像这样:

    rows    C

    0       7
    1       9
    2       11
    3       20
    4       30
    5       32
    6       35

非常感谢您的帮助

2 个答案:

答案 0 :(得分:2)

采用列AB的数组,然后使用flattenravel并从第一个索引取值:

df1 = pd.DataFrame(df[['A','B']].values.flatten()[1:],columns=['C']).\
                   reset_index().rename(columns={'index':'rows'}

OR:

df1 = pd.DataFrame(df[['A','B']].values.ravel()[1:],columns=['C']).\
                       reset_index().rename(columns={'index':'rows'})

print(df1)

   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35

答案 1 :(得分:0)

ravelarangeDataFrame建设者一起使用:

a = df[['A','B']].values.ravel()[1:]

df1 = pd.DataFrame({'rows':np.arange(len(a)), 'C':a})
print (df1)
   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35

您还可以选中What is the difference between flatten and ravel functions in numpy?

或使用melt

df1 = (df.melt(['rows'], value_name='C')
        .sort_values('rows')['C']
        .iloc[1:]
        .reset_index(drop=True)
        .rename_axis('rows')
        .reset_index())
print (df1)
   rows   C
0     0   7
1     1   9
2     2  11
3     3  20
4     4  30
5     5  32
6     6  35