我在数据按日期排序时遇到了一些问题,例如:
date, value, min
2015-08-17, 3, nan
2015-08-18, 2, nan
2015-08-19, 4, nan
2015-08-28, 1, nan
2015-08-29, 5, nan
现在我想将 min
列中的 min
值保存到这一行,所以结果看起来像这样:
date, value, min
2015-08-17, 3, 3
2015-08-18, 2, 2
2015-08-19, 4, 2
2015-08-28, 1, 1
2015-08-29, 5, 1
我已经尝试了一些选项,但仍然不明白我做错了什么,这是我尝试过的一个例子:
data['min'] = min(data['value'], data['min'].shift())
我不想遍历所有行,因为我拥有的数据很大。对于此类问题,您可以使用 pandas 编写的最佳策略是什么?
最佳答案
既然你提到你正在处理大数据集,并且关注性能,那么这里有一个使用 NumPy 的 np.minimum.accumulate
-
df['min'] = np.minimum.accumulate(df.value)
sample 运行-
In [70]: df
Out[70]:
date value min
0 2015-08-17 3 NaN
1 2015-08-18 2 NaN
2 2015-08-19 4 NaN
3 2015-08-28 1 NaN
4 2015-08-29 5 NaN
In [71]: df['min'] = np.minimum.accumulate(df.value)
In [72]: df
Out[72]:
date value min
0 2015-08-17 3 3
1 2015-08-18 2 2
2 2015-08-19 4 2
3 2015-08-28 1 1
4 2015-08-29 5 1
运行时测试-
In [65]: df = pd.DataFrame(np.random.randint(0,100,(1000000)), columns=list(['value']))
# @MaxU's soln using pandas cummin
In [66]: %timeit df['min'] = df.value.cummin()
100 loops, best of 3: 6.84 ms per loop
In [67]: df = pd.DataFrame(np.random.randint(0,100,(1000000)), columns=list(['value']))
# Using NumPy
In [68]: %timeit df['min'] = np.minimum.accumulate(df.value)
100 loops, best of 3: 3.97 ms per loop
关于python - 直到行 Pandas 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43587093/