Pandas Dataframe中的链式查找

时间:2016-11-04 15:38:43

标签: python pandas data-analysis

我有一个非常大的pandas数据框,有两列,我想以递归方式查找。

给出以下数据帧的输入:

NewID, OldID
1, 0
2, 1
3, 2
5, 4
7, 6
8, 7
9, 5

我想要生成系列OriginalId:

NewID, OldId, OriginalId
1, 0, 0
2, 1, 0
3, 2, 0
5, 4, 4
7, 6, 6
8, 7, 6
9, 5, 4

这可以通过迭代排序数据和每行检查OldId是否指向现有NewId来解决,如果是,则将OriginalId设置为该行的OriginalId。

这可以通过以下算法迭代合并和更新列来解决:

Merge OldId to NewId. 
For any one that did not match, set OriginalId to OldId. 
If they did match, set OldId to OldId for the matched column. 
Repeat until OriginalIds are all filled in.

感觉应该有一个大熊猫友好的方式通过累积总和或类似的方式来做到这一点。

1 个答案:

答案 0 :(得分:0)

易:

df.set_index('NewID', inplace=True)
df.loc[:, 'OriginalId'] = df.loc[df['OldId'], 'OldID'].fillna(df['OldId'])