【问题标题】:Unique function in pythonpython中的独特功能
【发布时间】:2021-06-28 09:49:47
【问题描述】:
for i in df["col"].unique():
   ...

这里unique函数是在每次循环迭代后调用的,还是只调用一次并将结果存储在内存中??

问这个只是为了检查unique函数是否在每次迭代后执行,那么即使在下一次迭代中i也有可能与上一次迭代相同。

Ex 第一次调用unique 函数然后df["col"].unique() 给出[1,2] 所以i 在第一次迭代中为1,在第二次迭代中unique 函数被再次调用并且i 可能再次得到1 作为值。

【问题讨论】:

  • 查看您的代码 - unique 在 for 循环开始时调用,而不是在每次迭代时,迭代器是 unique 输出。你想做什么?

标签: python-3.x pandas dataframe memory unique


【解决方案1】:

您使用的构造首先计算 .unique() 函数,并使用该函数的结果(如果可迭代)进行循环。

如果您希望循环在每次迭代时评估一个函数,您可以使用如下结构:

list = [x.function() for x in items]

查看此链接了解更多信息: https://opensource.com/article/18/3/loop-better-deeper-look-iteration-python

【讨论】:

    【解决方案2】:

    这是一个快速的代码示例,看看它是如何工作的:

    df = pd.DataFrame(0, index=np.arange(2), columns=['1','2'])
    df.iloc[0][0]=1
    for i in df['1'].unique():
        print(f'unique values : {i}')
        print(df)
        df.iloc[1][0]=2
    

    首先,我们创建一个 2x2 的零数据帧,在 [1][1] 位置为 1:

        1   2
    0   1   0
    1   0   0
    

    然后我们调用unique 来获取第 1 列的所有唯一值(即 0 和 1)。 在循环期间,我们更改第 1 列上的单元格之一(我们迭代的那个)。但正如您在输出中看到的那样,它不会在循环中添加任何迭代。 这意味着 df.unique() 在迭代之前存储结果,就像 MdBrainz 所说的那样,并且在循环期间修改值不会改变循环迭代的次数。

    输出:

    unique values : 1
       1  2
    0  1  0
    1  0  0
    unique values : 0
       1  2
    0  1  0
    1  2  0
    

    【讨论】:

    • 谢谢!这有帮助
    • @sahil 如果此答案解决了您的问题,请单击右侧的勾号按钮接受它。
    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多