有什么方法可以更快地执行此操作?

时间:2020-03-19 20:00:05

标签: python pandas loops for-loop replace

我正在处理一个庞大的医学数据集,我想看看是否有一些行对应于同一位患者。与患者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'

但是此操作花费太多时间。有什么方法可以更快地做到这一点?

1 个答案:

答案 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