我正在处理涉及数据框中匹配代码的任务。有人告诉我,如果我很好地布置关系,我可以使用图形(数据结构)来做到这一点。不幸的是我对图表一无所知,所以我不知道如何去做。
我想根据以下标准匹配'代码':
这是一个框架和所需输出的示例。
鉴于最初的左侧,右侧是我想要接收的结果。在这里,公司3改变了“代码”,因为它的后续序列(1140 1140 1115 1115 1118)不太常见(比1140 1140 1115 1115 1117,两个ID出现)。 ids 1和2(由一星和两星标记)有匹配的子序列,这使我们可以得出结论,两者具有相同的初始代码,因此我们将代码1140应用于id 2。
year id code year id code
2004 1 1140 2004 1 1140
2005 1 1140 2005 1 1140
2006 1 1115* 2006 1 1140
2007 1 1115* 2007 1 1140
2008 1 1117* 2008 1 1140
2006 2 1115** 2006 2 1140
2007 2 1115** 2007 2 1140
2008 2 1117** 2008 2 1140
2004 3 1140 2004 3 1140
2005 3 1140 2005 3 1140
2006 3 1115 2006 3 1140
2007 3 1115 2007 3 1140
2008 3 1118*** 2008 3 1118
我的匹配规则是否过于复杂?图表真的是最好的方法 - 在这种情况下,我从哪里开始?您能想到一种更简单的方法吗?
我知道这有点令人困惑,所以如果需要澄清,请告诉我。谢谢。
编辑:
我做了一个非常初步的尝试。我的尝试只能成功替换特定ID中的值,即便如此,我也无法弄清楚如何将其分配回原始数据帧。
# group by id
by_id = df.groupby(['id'])
# replace with first code in each group
for name, group in by_id:
selected = group['id'].reset_index()
selected['id'] = selected['id'][0]