我正在处理一个庞大的医学数据集,我想看看是否有一些行对应于同一位患者。与患者ID对应的列为ID Patient
。
我想创建一个新列,如果该患者出现在多行中,则为"yes"
;如果仅出现一次,则为"no"
。
这是我做的代码:
df['Repeated'] = 'No' # New Column
for i in range(0,len(df)):
for f in range(0,len(df)):
if df['ID NP'].iloc[i] == df['ID NP'].iloc[f]:
df['ID NP'].iloc[i] = 'Yes'
else:
df['ID NP'].iloc[i] = 'No'
但是此操作花费太多时间。有什么方法可以更快地做到这一点?
答案 0 :(得分:0)
这不仅花费太多时间,而且还将所有行中的所有iloc
都设置为“是”。
您只需要计算可找到不同iloc的次数。所以算一下:
stats = {}
for i in df['ID NP'].iloc:
stats[i] = stats.get(i, 0) + 1
现在您只需要遍历iloc索引:
for i in range(0, len(df['ID NP'].iloc)):
id_np = df['ID NP'].iloc[i]
if stats[id_np] > 1:
# then there should be 'Yes' in this row