我很难用1替换非零数字(二进制列)的上下数值。
我查看了在线SO帖子,但找不到解决此问题的方法。
import pandas as pd
import numpy as np
data = pd.DataFrame({'fullwindow' : [2, np.NaN, np.NaN, np.NaN, 3, np.NaN, 4, np.NaN, np.NaN, np.NaN, np.NaN, 5], \
'up' : [1, np.NaN, np.NaN, np.NaN, 1, np.NaN, 2,np.NaN, np.NaN, np.NaN, np.NaN, 2], \
'down' :[0, np.NaN, np.NaN, np.NaN, 1, np.NaN, 1, np.NaN, np.NaN, np.NaN, np.NaN, 2]})
print data[['up', 'down', 'fullwindow']]
up down fullwindow
0 1.0 0.0 2.0
1 NaN NaN NaN
2 NaN NaN NaN
3 NaN NaN NaN
4 1.0 1.0 3.0
5 NaN NaN NaN
6 2.0 1.0 4.0
7 NaN NaN NaN
8 NaN NaN NaN
9 NaN NaN NaN
10 NaN NaN NaN
11 2.0 2.0 5.0
dummy = pd.get_dummies(data.fullwindow)
print dummy
2.0 3.0 4.0 5.0
0 1 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 1 0 0
5 0 0 0 0
6 0 0 1 0
7 0 0 0 0
8 0 0 0 0
9 0 0 0 0
10 0 0 0 0
11 0 0 0 1
在虚拟数据集列中,大于或小于1的值将替换为1。对于第一列第0行(2.0),全窗口值为2,“ up”和“ down”值分别为1和1因此,列2.0的下一行(行索引1)将从0更改为1。上一行没有任何内容,因此将其保留。如果有两个重叠范围,则它仍为1。对于列4.0,行索引6为1。它具有2个向上和1个向下的位置。因此,行索引4、5、7更改为1
示例的预期输出
2.0 3.0 4.0 5.0
0 1 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 1 0 0
4 0 1 1 0
5 0 1 1 0
6 0 0 1 0
7 0 0 1 0
8 0 0 0 0
9 0 0 0 1
10 0 0 0 1
11 0 0 0 1
对于5.0,行索引11为1,向上为2,导致9、10行更改为1
答案 0 :(得分:0)
一个很好的问题,我很兴奋:-),我使用dropna
,然后使用repeat
和reindex
,在{{1}中使用cumcount
进行调整}是关键
index