我是Python和Pandas的新手,并且具有以下DataFrame
:
predictedFeature offset
2000 1
2000 2
0 4
0 6
2200 9
2200 11
2200 15
2200 16
2200 17
0 19
0 21
0 22
0 26
200 29
200 31
0 35
200 56
200 59
200 71
200 73
100 75
100 77
160 79
160 80
100 83
0 87
100 89
0 91
我正在尝试检查此列中值“ 0”的上下文。如果值为“ 0”,则需要对它的前三个和后三个值进行数组处理。
我已经有一个像required
[100,162,200,262,156,160,256]
这样的数组。
当我得到...
previous_array = [200,200,0]
next_array = [200,200,200]
...我需要检查previous_array
是否具有我的required
数组中的值。
有人可以帮我吗?
例如,
我有上面提到的数据框。
现在,在这里存在0
的地方。现在,我想用所需数组中的值替换该0。现在,
如果我们看到我在该数据帧的第3位为0。现在,如果我们采用前面的3个值,那么它本身将是2个,只有3个。
所以会是[2000,2000] 接下来是[0,2200,2200]
现在,如果我在所需的数组中检查此数组,则这些值将不存在。因此,我将不对此做任何事情。
现在,如果您看到前三个是0,
[0,0,0] and next three are [200,200,0]
所以现在,如果我将其与所需数组进行比较,并且下一个数组与此匹配,则将其替换为200
因此,同样。
我也添加了offset列。
答案 0 :(得分:0)
另一种方法是使用pandas.DataFrame.shift()
函数。
此功能使您可以通过将值上移或下移移(n)来创建新列pF_n
,该列是列predictedFeature
的偏移量(移位)。 。然后,您可以使用df.iterrows()
循环进行行比较,以从零行中获取上一个/下一个第三个值。然后,根据这些结果构建数组。
import pandas as pd
vals = ['2000', '2000', '0', '0', '2200',
'2200', '2200', '2200', '2200', '0',
'0','0', '0', '200', '200', '0', '200',
'200', '200', '200', '100', '100', '160',
'160', '100', '0', '100', '0']
df = pd.DataFrame({'pF': vals})
# Shift to get the third **previous** value.
df['pF-3'] = df['pF'].shift(3)
# Shift to get the third **following** value.
df['pF3'] = df['pF'].shift(-3)
# Add values surrounding 0 to a list.
results = [row.values.tolist() for _, row in df.iterrows() if row['pF'] == 0]
pF pF-3 pF3
0 2000 NaN 0
1 2000 NaN 2200
2 0 NaN 2200
3 0 2000 2200
4 2200 2000 2200
5 2200 0 2200
6 2200 0 0
7 2200 2200 0
8 2200 2200 0
9 0 2200 0
10 0 2200 200
11 0 2200 200
12 0 0 0
13 200 0 200
14 200 0 200
15 0 0 200
... ... ... ...
[[0.0, nan, 2200.0],
[0.0, 2000.0, 2200.0],
[0.0, 2200.0, 0.0],
[0.0, 2200.0, 200.0],
[0.0, 2200.0, 200.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 200.0],
[0.0, 160.0, nan],
[0.0, 100.0, nan]]
其中pF-3
列是前三个值,而pF3
列是后三个值。
我希望这会有所帮助。