【发布时间】:2023-01-03 00:54:14
【问题描述】:
我正在处理熊猫的一个问题:
我想按索引列对 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 函数?
【问题讨论】:
-
也许:
lambda x: np.gradient(x) if len(x) >= 2 else 0 -
好吧,显然我今天需要完成编码,因为你的简短解决方案有效 :D 我不确定如何使用参数
x,但显然那真的只是关注的组......