基于同一ID的其他行数据填充缺失值的最优方法
按ID分组填充缺失的End值
我有一个按ID分组的数据集,部分End字段存在缺失,需要用同一ID下下一行的Start值填充当前行缺失的End值。例如第0行的End应填充为第1行的Start值11/2/23,数据集规模较大,需自动化处理。
示例数据
import pandas as pd data = { "ID": [1, 1, 2, 2, 3, 3], "Start": ['11/1/23', '11/2/23', '12/12/23', '12/23/23', '9/4/23', '9/11/23'], "End": ['', '11/3/23', '12/13/23', '12/28/23', '','9/18/23'] } df = pd.DataFrame(data)
原始数据输出:
ID Start End 0 1 11/1/23 1 1 11/2/23 11/3/23 2 2 12/12/23 12/13/23 3 2 12/23/23 12/28/23 4 3 9/4/23 5 3 9/11/23 9/18/23
解决方案
通过groupby按ID分组,结合shift(-1)获取同一ID下下一行的Start值,再用combine_first填充缺失的End值:
# 将空字符串转为NaN,便于后续填充逻辑处理 df['End'] = df['End'].replace('', pd.NA) # 按ID分组,用下一行的Start值填充当前行缺失的End df['End'] = df.groupby('ID')['Start'].shift(-1).combine_first(df['End']) # 若需要将剩余可能的NaN转回空字符串(本例中无剩余) df['End'] = df['End'].fillna('').astype(str)
最终结果
ID Start End 0 1 11/1/23 11/2/23 1 1 11/2/23 11/3/23 2 2 12/12/23 12/13/23 3 2 12/23/23 12/28/23 4 3 9/4/23 9/11/23 5 3 9/11/23 9/18/23
内容的提问来源于stack exchange,提问作者E_Sarousi
相关产品推荐
相关产品推荐

