关于列表理解的多个条件语句

Posted

技术标签:

【中文标题】关于列表理解的多个条件语句【英文标题】:Multiple conditional statements on list comprehension 【发布时间】:2021-07-21 19:57:53 【问题描述】:

这是我的代码,我想知道我是否可以使用列表推导来执行相同的操作(计算 rows 中的集群并输出长度为df.shape[0] 的列表)。相同的簇号至少有两行,但可以更多,并且它们循环。我试过但无法弄清楚。 有什么建议吗?

我的代码:

    import pandas as pd

    cluster_global = 0
    cluster_relativo = 0
    cluster_index = []
    for index, row in df.iterrows():
        if row['cluster'] == cluster_relativo:
            cluster_index.append(cluster_global)
        elif row['cluster'] == (cluster_relativo + 1):
            cluster_global += 1
            cluster_relativo += 1
            cluster_index.append(cluster_global)
        elif row['cluster'] == 0:
            cluster_global += 1
            cluster_relativo = 0
            cluster_index.append(cluster_global)

DataFrame 看起来像

index cluster
0 0
1 0
2 1
3 1
4 1
5 2
6 2
7 0
8 0
... ...
n m<40

【问题讨论】:

您能否解释一下为什么您想要将这么多不同的东西表达为一个单一的理解?此外,df 的一个小型( 为了在计算集群数量的同时进行更快的计算,我所读到的所有内容都指出列表理解比 iterrows 更好。抱歉,如果这是不切实际的,这是我在这里的第一篇文章,但这里是:my_index = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 , 15, 16, 17, 18, 19] my_values = [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1] 【参考方案1】:

你想要这个吗?

from itertools import groupby

result = [0 if index == 0 and key == 0
          else index
          for index, (key, group) in enumerate(groupby(my_values))
          for _ in group
          ]

print(result)

通过 - df['cluster'].values 替换列表推导中的 my_values。测试

【讨论】:

哇,这很好用!老实说,我需要阅读文档以使其正确,但确实要快得多。谢谢@Nk03

以上是关于关于列表理解的多个条件语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询中的条件语句检查作为参数传递的多个值(列表)

关于sql查询where 1=1 理解

第五章-if语句

关于sql语句添加where条件问题,用java语句

关于 select的条件语句where 后能否内嵌另一个 select语句??

Python ❀ 条件判断语句