我想问一个关于熊猫的问题,我想用一个小例子来解释这个问题是个好主意。你知道吗
我有
Group Price
0 102
0 103
0 105
1 106
0 105
0 106
1 103
0 105
我想要
Group Price Impact
0 102
0 103
0 105
1 106 -5 (103 - 108)
0 104
0 108
1 101 -3 (104-107)
0 107
所以,基本上,我想找出前面(t-2)和后面(t+2)第二行之间的差异,一旦我的组值等于1(t)。例如,在第一种情况下,冲击值等于-5。这仅仅是因为我的组值在第4行(t)中是1,代码会找到第二行(t-2)和第六行(t+2)之间的差异。我可以使用以下代码:
i = Data.loc[Data.Group.eq(1)].index.tolist()
j = [(i-2,i+2) for i_ in i ]
Data.loc[Data.Group.eq(1), 'impact'] =
[(Data.Price.iloc[b] - Data.Price.iloc[a]) for (a,b) in j]
但是,如果任何一行中的条件都不满足,则出现以下错误:
IndexError: single positional indexer is out-of-bounds
例如,让我们再看看我的have数据。如您所见,第8(t)行中Group的值等于1(Price=101)。虽然我在第6行(t-2)中有值,但我没有第10行(t+2),因为数据有9行。你知道吗
如果数据不可用,我想开发使用最接近值的代码。例如,如我所说,第8(t)行中Group的值等于1。通常,代码应该找到第6行和第10行之间的差异。但是,由于我没有第10排,我想找出第6排和第9排的区别。你知道吗
我希望我能解释一下。你知道吗
提前感谢您的帮助!你知道吗
在对“Price”列执行^{} 之后,可以使用
ffill
和bfill
来获取超出界限的缺失值。首先创建列“Group”为1的掩码。然后shift
将'Price'中的值2和-2填入移位操作生成的NaN
并进行减法运算。你知道吗然后你得到
可以使用
fillna
替换Impact中的所有Nan值感谢@Scott Boston添加了注释,您可以使用方法^{} 在一行中完成:
相关问题 更多 >
编程相关推荐