【发布时间】:2017-03-27 21:23:51
【问题描述】:
我有一个代表独特项目的数据框。每个项目由一组varA、varB 和varC 唯一标识(因此每个项目对于varA、varB 或varC 具有0 到n 个值)。我的 df 每个唯一项目有多个原始数据,varA、varB 和 varC 的各种组合。
df是这样的(ID在列中是唯一的,但不代表唯一的项)。
df = pd.DataFrame({'ID':[1,2,3,4,5],
'varA':['a', 'd', 'a', 'm','Z'],
'varB':['b', 'e', 'k', 'e',NaN],
'varC':['c', 'f', 'l', NaN ,'t']})
所以在这里的df中,你可以看到:
- 1 和 3 是相同的项目:{varA:[a], varB:[b,k], varC: [c,l]}。
- 2和4也一样:{varA:[d,m], varB:[e], varC:[f]}
我想识别每个独特的项目,给他们一个独特的 ID,并存储他们的信息。
我写的代码效率极低:
-
Step1:我遍历数据框的每一行并列出每个变量
- 当三个变量都是新的时,它是一个新项目,我给它一个 id。
- 当任一变量已知时,我将新变量存储在各自的列表中并继续走到下一行
-
Step2:遍历所有数据框后,我有两个子集:
- 1 具有唯一 ID,
- 另一个没有唯一ID,但可以在具有唯一ID的那些中找到其信息,
varA、varB或varC。太丑了,我在任一变量上连续合并,并找到唯一的 id。
- 结果:我的 df 与开始时相同,但有一列重复的唯一标识符。
这适用于 varA 和 varB 的 20,000 行条目。这在 100,000 行上运行非常缓慢并且在结束前(在 Step1 和 Step2 之间)死亡,我需要在 1,000,000 行上完成。
有什么办法可以做到这一点吗?
【问题讨论】:
-
您能提供您的预期结果吗?
-
如果 3 和 4 分别相同,你会给 1 和 2 一个唯一的 ID 吗? (意思是你保留第一次出现的重复吗?)
-
我想为 1 和 3 提供相同的唯一 ID,并为 2 和 4 提供相同的 ID。类似于您的答案(非常酷的东西!),但每一行都应该有一个唯一的值身份证。
标签: python-2.7 pandas numpy