我有一个像这样的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
答案 0 :(得分:0)
使用pd.DataFrame.shift
获取上一行/下一行,pd.concat
合并数据帧& fillna
将空值设置为零
null的存在将upts upcast为float,因为numpy整数数组不能包含null值,在将null替换为0后将其强制转换为int。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
console.log("init");
$(".first").change(function(){
console.log(this);
});
$(".second").change(()=>{
console.log(this);
});
});
</script>
</head>
<body>
<input type="text" class="first" />
<input type="text" class="second" />
</body>
</html>
输出:
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)