我想获取一个包含一堆不同的唯一个体的数据集,每个个体都有多个条目,并为每个人的所有条目分配一个唯一的 ID。这是 df 的示例:
FirstName LastName id
0 Tom Jones 1
1 Tom Jones 1
2 David Smith 1
3 Alex Thompson 1
4 Alex Thompson 1
所以,基本上我希望 Tom Jones 的所有条目都具有 id=1,David Smith 的所有条目都具有 id=2,Alex Thompson 的所有条目都具有 id=3,等等。
所以我已经有了一个解决方案,这是一个非常简单的 python 循环,它迭代两个值(一个用于 id,一个用于索引)并根据它们是否与前一个个体匹配来为个体分配一个 id:
x = 1
i = 1
while i < len(df_test):
if (df_test.LastName[i] == df_test.LastName[i-1]) &
(df_test.FirstName[i] == df_test.FirstName[i-1]):
df_test.loc[i, 'id'] = x
i = i+1
else:
x = x+1
df_test.loc[i, 'id'] = x
i = i+1
我遇到的问题是 DataFrame 有大约 900 万个条目,因此使用该循环将花费大量时间来运行。谁能想到一种更有效的方法来做到这一点?我一直在寻找 groupby 和 multiindexing 作为潜在的解决方案,但还没有找到正确的解决方案。
原文由 Simon Sharp 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以加入姓氏和名字,将其转换为类别,然后获取代码。
当然,多个同名的人会有相同的
id
。