我有一个巨大的数据帧(大约1亿行),其方式如下:

ID   Years
1    [1990,1991,1995,2000,2001,2006]
2    [1990,1990]
3    [1980,1981,1990,1995]

我希望它以以下数据帧的形式返回第一个出现的the largest gap between two consecutive years(您可以假设年份列表是按顺序排序的):

ID    largest_gap   from_year  to_year
1     5             1995       2000
2     0             1990       1990
3     9             1981       1990 

有什么最有效的计算方法吗?

推荐答案

另一种可能的解决方案是基于numpy.roll:

def get_years(x):
    a = np.array(x)
    idx = (a - np.roll(a, 1))[1:].argmax()
    return a[[idx, idx+1]]

df[['from_year', 'to_year']] = pd.DataFrame(df['Years'].map(get_years).tolist())

输出:

   ID                                 Years  from_year  to_year
0   1  [1990, 1991, 1995, 2000, 2001, 2006]       1995     2000
1   2                          [1990, 1990]       1990     1990
2   3              [1980, 1981, 1990, 1995]       1981     1990

Python相关问答推荐

手动为pandas中的列上色

Ibis中是否有一个ANY或ANY_UTE表达,可以让我比较子查询返回的一组值中的值?

如何在Python中增量更新DF

在Python中管理多个OpenGVBO和VAO实例

如何使用Selenium访问svg对象内部的元素

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

如何终止带有队列的Python进程?+ 队列大小的错误?

在Python和matlab中显示不同 colored颜色 的图像

分组数据并删除重复数据

线性模型PanelOLS和statmodels OLS之间的区别

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

抓取rotowire MLB球员新闻并使用Python形成表格

如果值不存在,列表理解返回列表

我如何使法国在 map 中完全透明的代码?

Python+线程\TrocessPoolExecutor

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

删除marplotlib条形图上的底边

Geopandas未返回正确的缓冲区(单位:米)