IFF DataFrame của bạn đã được sắp xếp theo các phím nhóm bạn có thể sử dụng một đĩa đơn shifttrên toàn bộ DataFrame và wheređể NaNcác hàng tràn vào nhóm tiếp theo. Đối với các DataFrame lớn hơn với nhiều nhóm, điều này có thể nhanh hơn một chút.
df['prev_value'] = df['value'].shift[].where[df.object.eq[df.object.shift[]]] object period value prev_value 0 1 1 24 NaN 1 1 2 67 24.0 2 1 4 89 67.0 3 2 4 5 NaN 4 2 23 23 5.0Một số thời gian liên quan đến hiệu suất:
import perfplot import pandas as pd import numpy as np perfplot.show[ setup=lambda N: pd.DataFrame[{'object': np.repeat[range[N], 5], 'value': np.random.randint[1, 1000, 5*N]}], kernels=[ lambda df: df.groupby['object']['value'].shift[], lambda df: df['value'].shift[].where[df.object.eq[df.object.shift[]]], ], labels=["GroupBy", "Where"], n_range=[2 ** k for k in range[1, 22]], equality_check=lambda x,y: np.allclose[x, y, equal_nan=True], xlabel="# of Groups" ]Bài viết liên quan
Kiểm tra số chẵn lẻ trong python
Kiểm tra số đối xứng trong python
Kiểm tra số chính phương trong python
Kiểm tra số nguyên tố trong python
Kiểm tra số nguyên trong python
Kiểm tra số hoàn hảo trong python
Làm tròn số trong python bằng hàm round