【发布时间】:2017-10-09 14:38:18
【问题描述】:
如果 ipu 中的任何日期介于 Date_range 中的日期范围之间,我正在寻找在 InRange 单元格中添加 1,否则为 0。
元组列表:
ipu = [('2016-05-31', '5,000'),('2015-03-06', '2,920')]
df:
Date Date_range InRange
0 2016-07-26 [2016-07-26, 2016-04-26] NaN
1 2016-04-26 [2016-04-26, 2016-01-26] NaN
2 2016-01-26 [2016-01-26, 2015-10-27] NaN
3 2015-10-27 [2015-10-27, 2015-07-21] NaN
4 2015-07-21 [2015-07-21, 2015-04-27] NaN
5 2015-04-27 [2015-04-27, 2015-01-27] NaN
6 2015-01-27 [2015-01-27, 2014-10-20] NaN
7 2014-10-20 [2014-10-20, 2014-07-22] NaN
8 2014-07-22 [2014-07-22, 2014-04-23] NaN
9 2014-04-23 [2014-04-23, 2014-01-27] NaN
10 2014-01-27 [2014-01-27, 2013-10-28] NaN
11 2013-10-28 [2013-10-28, 2013-07-23] NaN
12 2013-07-23 NaN NaN
期望的输出:
Date Date_range InRange
0 2016-07-26 [2016-07-26, 2016-04-26] 1
1 2016-04-26 [2016-04-26, 2016-01-26] 0
2 2016-01-26 [2016-01-26, 2015-10-27] 0
3 2015-10-27 [2015-10-27, 2015-07-21] 0
4 2015-07-21 [2015-07-21, 2015-04-27] 0
5 2015-04-27 [2015-04-27, 2015-01-27] 1
6 2015-01-27 [2015-01-27, 2014-10-20] 0
7 2014-10-20 [2014-10-20, 2014-07-22] 0
8 2014-07-22 [2014-07-22, 2014-04-23] 0
9 2014-04-23 [2014-04-23, 2014-01-27] 0
10 2014-01-27 [2014-01-27, 2013-10-28] 0
11 2013-10-28 [2013-10-28, 2013-07-23] 0
12 2013-07-23 NaN 0
这是我尝试过的代码:
for i in range(len(df.index)-1):
for r in range(len(ipu)):
df.loc[(df['Date_range'][i][0] > ipu[r][0]) & (df['Date_range'][i][1] <= ipu[r]), 'InRange'[i]] = 1
我得到:
KeyError: 'cannot use a single bool to index into setitem'
我看了
但不清楚如何将其应用于我的案例。
我知道我的代码已经完成了一半,但我被卡住了......我很欣赏一些指导。
谢谢
【问题讨论】:
-
你的循环中的
i是什么? -
@IanS,我使用 i 添加了 for 循环行。
-
在基本级别上,您只能索引具有相同长度的布尔向量的数据帧。在这里,您的表达式返回一个布尔值(
True或False),因此索引失败。 -
谢谢@IanS。我应该寻找什么类型的解决方案?
-
@IanS 我尝试使用日期范围作为列表,并为日期元组应用 for 循环和 for 循环,但也没有成功(并且认为它的计算效率非常低)
标签: python-2.7 pandas boolean