如何遍历值是元组的字典熊猫,并找到第一个 True 和 False 值

Posted

技术标签:

【中文标题】如何遍历值是元组的字典熊猫,并找到第一个 True 和 False 值【英文标题】:How to iterate through a dictionary pandas where values are tuples, and find first True and False values 【发布时间】:2016-07-15 05:09:55 【问题描述】:

我有一个名为weeks_adopted 的字典,当我运行iteritems() 并打印value 时,我得到(3 个键的值示例,每个键称为app_id)。 weeks_adopted 字典由键值对组成,其中键的类型为<type 'str'>,值是<class 'pandas.core.series.Series'>,其中dtypebool。以下是value 的一个示例,其中的索引基本上是所指的周(按顺序是一年中的第 0-13 周):

Name: app_id_str, dtype: bool
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9      True
10    False
11    False
12     True
13    False
Name: app_id_str, dtype: bool
0     False
1     False
2     False
3      True
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
13    False
Name: app_id_str, dtype: bool
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11     True
12     True
13     True

我想要做的是计算从第一个 True 值到第一个 False 值的行数,对于每个键,显然要考虑每种情况,例如在你看到的第一个的第三个元组中True 在第一个 False 之后。基本上这与辍学率有关 - 用户什么时候第一次看到某些东西(真)然后放弃它(假)。

在上面的元组示例中,就采用率而言,结果应该是 1、1 和 3。

这是我目前的基本方法:

for key,value in weeks_adopted.iteritems():
    start= value.index(True)
    end = value.index(False)
    adoption=end-start
    weeks_adopted[key] = adoption

但是,即使使用这种方法,我也会收到此错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-32-608c4f533e54> in <module>()
     19 for key,value in weeks_adopted.iteritems():
     20     print value
---> 21     start= value.index(True)
     22     end = value.index(False)
     23     adoption=end-start

TypeError: 'Int64Index' object is not callable

在答案中,请您帮助我进行哪些其他检查才能找到第一个 True 和第一个 Last 值?我假设这种类型的循环在许多情况下都很常见?

【问题讨论】:

weeks_adopted的结构到底是什么?具有 int 和 boolean 对的元组字典?只有布尔值的字典元组?请提供定义的、可重现的结构,而不是循环输出。 嗨@Parfait,看看所做的更改。 【参考方案1】:

你可以试试这个:

def calc_adoption(ts):
    true_index = ts[ts].index
    if len(true_index) == 0:
        return 0
    first_true_index = true_index[0]
    false_index = ts.index.difference(true_index)
    false_index = false_index[false_index > first_true_index]
    if len(false_index) == 0:
        return 14 - first_true_index
    return false_index[0] - first_true_index

adopted_weeks = k: calc_adoption(v) for k, v in weeks_adopted.iteritems()

【讨论】:

谢谢,这个逻辑是有道理的,但是得到File "&lt;ipython-input-32-a590e23452f6&gt;", line 31 adopted_weeks = [k: calc_adoption(v) for k, v in weeks_adopted.iteritems()] ^ SyntaxError: invalid syntax 知道了!我用test= for k,v in weeks_adopted.iteritems(): test[k] = calc_adoption(v)

以上是关于如何遍历值是元组的字典熊猫,并找到第一个 True 和 False 值的主要内容,如果未能解决你的问题,请参考以下文章

从 dict 创建数据框,其中键是元组,值是列表

迭代字典中的键,它们是元组

字典 元组

Python面试必考重点之列表,元组和字典第八关——详细描述列表与元组的区别,并举例说明

python 元组的魔法day12

python无限遍历,实现在多维嵌套字典列表元组的JSON中获取数据