如何遍历值是元组的字典熊猫,并找到第一个 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'>
,其中dtype
是bool
。以下是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 "<ipython-input-32-a590e23452f6>", 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 值的主要内容,如果未能解决你的问题,请参考以下文章