Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较基于内日时间(小时)的值,并将答案返回到同一时间段中的新列_Python_Pandas_Datetime - Fatal编程技术网

Python 比较基于内日时间(小时)的值,并将答案返回到同一时间段中的新列

Python 比较基于内日时间(小时)的值,并将答案返回到同一时间段中的新列,python,pandas,datetime,Python,Pandas,Datetime,我试图根据小时日期时间索引比较不同行之间的值 例如:如果当天的10:00值大于11:00值,则将布尔值返回到新列 初始数据: Value Time 2018-11-09 10:00:00 25 2018-11-09 11:00:00 45 2018-11-09 12:00:00 15 201

我试图根据小时日期时间索引比较不同行之间的值

例如:如果当天的10:00值大于11:00值,则将布尔值返回到新列

初始数据:

                    Value
Time                                                                           
2018-11-09 10:00:00    25
2018-11-09 11:00:00    45
2018-11-09 12:00:00    15
2018-11-09 13:00:00    95
2018-11-12 10:00:00    85
2018-11-12 11:00:00    35
2018-11-12 12:00:00    55 
2018-11-12 13:00:00    65

dataframe snippet:
import pandas as pd
data = [25,45,15,95,85,35,55,65]
index = ['2018-11-09 10:00:00','2018-11-09 11:00:00','2018-11-09 12:00:00','2018-11-09 13:00:00'
         ,'2018-11-12 10:00:00','2018-11-12 11:00:00','2018-11-12 12:00:00','2018-11-12 13:00:00']

df = pd.DataFrame(data,index,columns=['Value'])
df.index = pd.to_datetime(df.index)

期望输出:

                    Value   10h-Val 11h-Val 12h-Val 13h-Val 12h-Val>11h-Val? 
Time                                                                           
2018-11-09 10:00:00    25       25         
2018-11-09 11:00:00    45               45
2018-11-09 12:00:00    15                       15                   False
2018-11-09 13:00:00    95                               95
2018-11-12 10:00:00    85         85            
2018-11-12 11:00:00    35               35 
2018-11-12 12:00:00    55                       55                    True
2018-11-09 13:00:00    65                               65                                    


添加这些列的最快方法的结构如下:

df.index = pd.to_datetime(df.index)
df['10h-val'] = df.loc[df.index.hour == 10].Value
df['12h-Val>11h-Val?'] = ''
您会注意到pandas将创建一个新名称,标题位于左侧的方括号中,并将该值设置为等于列值,其中小时等于 10,我们需要填充比较列

对于比较列,我们将循环遍历数据帧的行,并更新与基准小时相匹配的行:

base_hr = 12
comp_hr = 11

for index, row in df.iterrows():
    if index.hour == base_hr:
        row = row.copy()
        base_value = row.Value
        comp_value = df.loc[((row.date == df.index.date) 
            & (df.index.hour == comp_hr))]['Value'].values[0]        
        df.loc[index,'12h-Val>11h-Val?'] = base_value > comp_value

df = df.drop(columns='date')
然后打印以获得您要查找的结果:

print(df)

我不确定我是否理解你想要的结果。您只想要
12h Val>11 hVal
?还是要进行所有成对比较?比较可以是任意的,在这种情况下,只有12h Val>11 HV第一部分起作用,但当尝试比较这两个值时,它会抛出一个错误,即:只能比较标记相同的系列对象您介意说明如何使用此比较吗?我的代码片段是基于列标题的,这表明我们正在比较12小时和11小时,有几个12小时和11小时,结果返回一个序列,这将产生一个布尔值。好的,在开始时,我们有一个包含两列的数据框,“时间”和“值”我们需要的是比较不同时间行之间的值,例如:12:00时的值>10:00时的值,然后将bolean答案存储在同一数据帧的新列中。您的错误:“只能比较标记相同的系列对象”是将多个小时为12的行与小时为11的多个列进行比较的结果,不会返回任何内容。函数“12:00时的值>10:00时的值?”需要比较一行,并且必须为这两行指定一个完整日期,并读取“2018-11-09 12:00时的值>2018-11-09 10:00时的值”,这将只返回一个结果。如果这就是您希望实现的,那么它更适合于函数-整个程序的输出是什么?df可能不适合这种情况。是的,我正在做的是数据分析,我需要根据小时数比较数值。我会研究,看看我是否找到了解决方案,如果你有什么,请在这里分享,谢谢