Python 比较基于内日时间(小时)的值,并将答案返回到同一时间段中的新列
我试图根据小时日期时间索引比较不同行之间的值 例如:如果当天的10:00值大于11:00值,则将布尔值返回到新列 初始数据: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
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可能不适合这种情况。是的,我正在做的是数据分析,我需要根据小时数比较数值。我会研究,看看我是否找到了解决方案,如果你有什么,请在这里分享,谢谢