Python-将上一行和下一行绑定到当前行
我有一个熊猫数据框,如下所示:Python-将上一行和下一行绑定到当前行,python,pandas,dataframe,matrix,Python,Pandas,Dataframe,Matrix,我有一个熊猫数据框,如下所示: 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
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”列,这两个列作为索引,前面或后面都不能出现,如下所示):
用于获取上一行/下一行、合并数据帧以及将null设置为零
null的存在将int向上转换为浮点,因为numpy整数数组不能包含null值,在将null替换为0后,这些值将被转换回int
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
您的MWE数据帧与您显示的输入没有任何关系?谢谢,我可能会使用此数据帧的一些变体。你把“p”和“n”混在一起了。如果您能解释一种方法,我可以将其标记为正确答案,我可以避免在文档索引的开头和结尾分别取上一行和下一行的值。谢谢,我将通过
df.doc
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