首页 文章

Python - Cbind前一行和下一行到当前行

提问于
浏览
0

我有一个像这样的Pandas数据框:

d = {'col1': [1, 2], 'col2': [3, 4], 'col3': [5, 6]}
df = pd.DataFrame(data=d)

看起来像:

doc  sent col1 col2 col3
0   0    0    5   4    8
1   0    1    6   3    2
2   0    2    1   2    9
3   1    0    6   1    6
4   1    1    5   1    5

我想将前一行和下一行绑定到每一列,如下所示(在我的示例中考虑“doc”和“sent”列,这些列为下面之前或之后没有任何内容可以出现的索引):

doc  sent col1 col2 col3 p_col1 p_col2 p_col3 n_col1 n_col2 n_col3
0   0    0    5   4    8    0      0      0      6       3      2  
1   0    1    6   3    2    5      4      8      1       2      9
2   0    2    1   2    9    6      3      2      6       1      6
3   1    0    6   1    6    0      0      0      5       1      5
4   1    1    5   1    5    6      1      6      0       0      0

1 回答

  • 0

    使用pd.DataFrame.shift获取上一行/下一行,pd.concat合并数据帧&fillna将空值设置为零

    由于numpy整数数组不能包含空值,因此将空值向上转换为浮点数,因为在将空值替换为0后将其转换为整数 .

    cs = ['col1', 'col2', 'col3']
    g = df.groupby('doc')
    
    pd.concat([
       df, 
       g[cs].shift(-1).add_prefix('n'), 
       g[cs].shift().add_prefix('p')
    ], axis=1).fillna(0).astype(int)
    

    输出:

    doc  sent  col1  col2  col3  ncol1  ncol2  ncol3  pcol1  pcol2  pcol3
    0    0     0     5     4     8      6      3      2      0      0      0
    1    0     1     6     3     2      1      2      9      5      4      8
    2    0     2     1     2     9      0      0      0      6      3      2
    3    1     0     6     1     6      5      1      5      0      0      0
    4    1     1     5     1     5      0      0      0      6      1      6
    

相关问题