当前位置: 首页 > 知识库问答 >
问题:

有什么方法可以更快地执行这个操作?[重复]

计阳泽
2023-03-14

我正在处理一个大型医学数据集,我想看看是否有一些行对应于同一个患者。与患者 ID 对应的列是 ID 患者
我想创建一个新列,如果该患者出现在多行中,它将是“是”,如果它只出现一次,它将是“否”。
这是我做的代码:

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

单于庆
2023-03-14

这不仅需要太多时间,而且还会将所有行中的所有 iloc设置为“是”。

您只需要计算可以找到多少次不同的ilocs。所以数数它们:

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
 类似资料:
  • 如果不向新的ArrayList中添加值,而只是更新原始列表,如何对此进行优化?

  • 问题内容: 我了解到try catch语句的finally子句始终执行。但是有人对我说,有可能避免执行它(删除它不是一种选择)。 -有人怎么可能? -我也很好奇知道为什么有人要避免执行它? 问题答案: 使用该块中未捕获的异常将其杀死,或者将整个JVM杀死(这将杀死线程)。 除了不良的设计外,没有充分的理由停止执行块。如果不应该每次都运行它,则不要将其放在一个块中。 使用下面的测试代码,我运行了两种

  • 我正在寻找最快的方法,从列表中获得所有可能的对组合之间的最小绝对差。 我做了两个解决方案,但没有一个是可以接受的。 输入示例:[3,-7,0] 所有组合:(3,-7),(3,0),(-7,0) 输出最小abs差值:3 解释: 3-0=3

  • 我是Keras的新手,正在尝试实施解相关批次规范文件(https://arxiv.org/abs/1804.08450)作为一种学习体验。该层与标准批次规范非常相似,只包含一些附加组件。 我们现在将数据居中并应用白化变换,通过对协方差矩阵进行特征值分解来计算白化变换,而不是将输入数据集中到每个层并通过方差进行归一化。 整个过程在论文(算法1,第5页)中有明确的阐述,仅由5个等式组成,我在下面的代码

  • 材料设计非常强调“纸张”的隐喻。要做到这一点,阴影是必不可少的。由于材料设计是一种理念,而不是API(尽管它内置在L中),因此应该在任何地方(Windows窗体、HTML/CSS等)进行设计。如何在Android API 14到20中做到这一点? 请注意,对于圆形和其他非方形形状,预制PNG实际上并不实用。