我正在研究Pandas的一个问题:
我想将一个DataFrame
按索引列分组,然后执行一个transform(np.gradient)
(即计算一个组中所有值的导数)。如果我的组太小(少于2个元素),这就不起作用了,所以在这种情况下我只想返回0。
下面的代码返回一个错误:
import pandas as pd
import numpy as np
data = pd.DataFrame(
{
"time": [0,0,1,2,2,3,3],
"position": [0.1,0.2,0.2,0.1,0.2,0.1,0.2],
"speed": [150.0,145.0, 149.0,150.0,150.0,150.0,150.0],
}
)
derivative = data.groupby("time").transform(np.gradient)
给我一个ValueError:
ValueError: Shape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.
上面示例DataFrame的所需输出为
time position_km
0 0.1 -5.0
0.2 -5.0
1 0.2 0.0
2 0.1 0.0
0.2 0.0
3 0.1 0.0
0.2 0.0
有人知道如何解决这个问题吗,例如,在transform
中使用lambda函数?
2条答案
按热度按时间ffdz8vbo1#
做的正是我想要的。谢谢@ Chrysophylax
dtcbnfnu2#
可能的选择: