【发布时间】:2020-01-06 22:58:47
【问题描述】:
我有一个带有 date 和 time 输入的数据集。
首先,我编写了代码以在 X3 列中查找 5 值的第一次,并将该时间变为 0。
然后我尝试将 timedelta(hours=1) 添加到范围为 6 的内容中。
然后它给了我这个错误"unsupported operand type(s) for +: 'bool' and 'datetime.timedelta'"
谁能帮我解决这个错误?
我的代码:
data =pd.read_csv('data6.csv')
data['time_diff']= pd.to_datetime(data['date'] + " " + data['time'],
format='%d/%m/%Y %H:%M:%S', dayfirst=True)
mask = data['X3'].eq(5)
data['duration'] = data[mask].drop_duplicates(['date','X3']).groupby(['date','X3'])['time_diff'].transform('first')
data['duration'] = data['time_diff'].sub(data['duration']).dt.total_seconds().div(3600)
date time x3 Time(expected)
10/3/2018 6:15:00 0 NaN
10/3/2018 6:45:00 5 0.0
10/3/2018 7:45:00 0 NaN
10/3/2018 9:00:00 0 NaN
10/3/2018 9:25:00 7 NaN
10/3/2018 9:30:00 0 NaN
10/3/2018 11:00:00 0 NaN
10/3/2018 11:30:00 0 NaN
10/3/2018 13:30:00 0 NaN
10/3/2018 13:50:00 5 NaN
10/3/2018 15:00:00 0 NaN
10/3/2018 15:25:00 0 NaN
10/3/2018 16:25:00 0 NaN
10/3/2018 18:00:00 7 NaN
10/3/2018 19:00:00 0 NaN
10/3/2018 19:30:00 0 NaN
10/3/2018 20:00:00 0 NaN
10/3/2018 22:05:00 0 NaN
10/3/2018 22:15:00 5 NaN
10/3/2018 23:40:00 0 NaN
10/4/2018 6:58:00 5 0.0
10/4/2018 13:00:00 0 NaN
10/4/2018 16:00:00 7 NaN
10/4/2018 17:00:00 7 NaN
所以这里我有一个求和方程来应用 X3 列值。
然后根据这个求和方程,我想每小时取 X3 的值。
这就是为什么我首先找到每天提及值5的开始时间,然后将该时间转换为0:00:00。
然后从那个开始时间增加一小时一小时到六小时,我需要取 A 的值。
对于一个方程是:
A = X3(5) - M
所以我首先分别取了第一次,只取了 0 次。 为此,我使用了代码:
time= data['duration'].eq(0)
然后我在类里面写了这个方程方法
time=0
M=0
for _ in range(len(data['X3'])):
if X3.all()==5:
if time ==data['duration'].eq(5).all():
M=X3
for i in (time + timedelta(hours=1*it) for it in range(6)):
M = 5 - 0.0015 * np.sum(i*X3)
print(M)
然后得到的值只有 0 。
然后这个错误来了。
从这些代码中我期望的输出是:
time expected output
0 (start time of x3 value of 5) 5
1 hr 5-0.3(according to the summation equation) = 4.7
2hr 5-0.6=4.4
3hr 5-0.9=4.1
4hr 5-1.2=3.8
5hr 5-1.5=3.5
6hr 5-1.8=3.2
【问题讨论】:
-
为了让社区能够回答您的问题,请以我们可以复制和粘贴的格式添加您正在使用的数据(或者更准确地说,是重现错误的最小示例)检查什么会起作用(即不是屏幕截图)。要了解如何处理 pandas 问题,请访问:stackoverflow.com/questions/20109391/…
-
@Itamar Mushkin 是的,我编辑了我的问题。我希望你现在能理解你的问题。
-
超级,问题更好。但我想问大约 6 个小时。这意味着
X3== 5之后的下 6 行?time中的值在time + timedelta(hours=1*it)中的解决方案中使用是什么原因?列time的值有一些过滤? -
另外,如果检查您的预期输出,则从 5 中减去 [0,0.3,0.6,1.2,..]?那么
time列值不用于计数吗? -
@jezrael 实际上我想说的是,在 X3 列中有 5 个值。前 5 个值从早上 6:45:00 开始。所以我的第一次是这个,它被称为 00:00:00。假设我们绘制图表。 x轴是时间。则 0 时 y 值为 5。从该值开始,从开始时间 1 小时开始,1 小时值将根据 6 小时范围内的求和方程值减少。这就是为什么我想取 X3 ==5 值的开始时间。这些预期输出将随时间保存在另一个数据 csv 中。