Python 如何在dataframe中每天的特定时间操作dataframe列中的值

Python 如何在dataframe中每天的特定时间操作dataframe列中的值,python,pandas,dataframe,datetime,manipulate,Python,Pandas,Dataframe,Datetime,Manipulate,因此,我有一个日期时间索引的数据帧,如下所示: eventTime Energy Power RunningHours 9/29/2018 0:00 146.985 65 2256.88 9/29/2018 1:00 147.05 64.5 2257.87 9/29/2018 2:00 147.116 65 2258.87 9/29/2018 3:00 147.181 65 2259.87 9/29/2018 4:00 147.246 65 2260.87 9

因此,我有一个日期时间索引的数据帧,如下所示:

eventTime   Energy  Power   RunningHours
9/29/2018 0:00  146.985 65  2256.88
9/29/2018 1:00  147.05  64.5    2257.87
9/29/2018 2:00  147.116 65  2258.87
9/29/2018 3:00  147.181 65  2259.87
9/29/2018 4:00  147.246 65  2260.87
9/29/2018 5:00  147.312 65  2261.87
9/29/2018 5:11  76.428      
9/29/2018 5:12      65  
9/29/2018 6:00  147.377 65  2262.87
9/29/2018 7:00  147.443 65  2263.87
9/29/2018 8:00  147.45      2263.98
9/29/2018 9:17  76.558      
9/29/2018 9:17          1174.35
9/29/2018 19:00 147.502 65  2264.75
9/29/2018 20:00 147.567 65  2265.75
9/29/2018 21:00 147.633 65  2266.75
9/29/2018 22:00 147.698 65  2267.75
9/29/2018 23:00 147.764 65  2268.75
9/30/2018 0:00  147.829 65  2269.75
9/30/2018 1:00  147.895 65  2270.75
9/30/2018 2:00  147.961 65  2271.75
9/30/2018 3:00  148.026 65  2272.73
9/30/2018 4:00  148.092 65  2273.73
9/30/2018 5:00  148.157 65  2274.73
9/30/2018 6:00  148.223 65  2275.73
9/30/2018 7:00  148.288 65  2276.73
9/30/2018 8:00  148.297     2276.87
9/30/2018 13:51     64  
9/30/2018 19:00 148.35  65  2277.68
9/30/2018 20:00 148.415 65  2278.67
9/30/2018 21:00 148.481 65  2279.67
9/30/2018 22:00 148.546 65  2280.67
9/30/2018 23:00 148.611 65  2281.67
对于datetime索引中的每一天,我都在寻找23小时和0小时的“RunningHours”值之间的差异

我在想象我的输出是什么样子

9/29/2018   11.87
9/30/2018   11.92
我怎样才能做到这一点。我目前正在将datetime索引分解为日期和时间,然后循环查找日期和时间以找出差异。对于一些非常简单的事情来说似乎很复杂,我相信有一种更简单的方法可以使用datetime索引。我只是不知道怎么做。请帮忙

@ansev
对于连续的数据,以及存在00:00和23:00时间戳的信息,您的代码工作得非常好。但是,如果这两个时间戳缺少数据,脚本将获取此日期的第一个可用数据点或最后一个可用数据点

因为。e、 g:下面的数据

6/7/2018 0:00   67.728  64  1037.82
6/7/2018 1:00   67.793  64  1038.82
6/7/2018 2:00   67.857  64  1039.82
6/7/2018 3:00   67.922  64  1040.82
6/7/2018 4:00   67.987  64  1041.82
6/7/2018 5:00           64  1042.82
6/7/2018 6:00               1043.43
6/7/2018 23:00  68.288      
脚本的输出是

6/7/2018    1037.82 1043.43 5.61
如果数据不可用,如何修改为NaN?
非常感谢您在这方面的帮助。

假设按时间顺序排列,我们可以使用每个
日期的
第一个
最后一个
,然后我们可以得到差异

new_df = (df.groupby(pd.to_datetime(df['eventTime']).dt.date)['RunningHours']
            .agg(['first','last'])
            .assign(difference=lambda x: x['last']-x['first'])
            .reset_index())

print(new_df)
    eventTime    first     last  difference
0  2018-09-29  2256.88  2268.75       11.87
1  2018-09-30  2269.75  2281.67       11.92


我在这里回答了我自己的问题,以帮助那些正在寻找不同事物的人。

df.groupby('eventTime')['RunningHours'].agg(['first','last']).diff(axis=1)。iloc[:,-1]
?@ansev:谢谢,但它保留了所有原始的日期时间索引,并返回0或NaN,但没有“RunningHours”中的差异Column您能以更方便使用的格式共享数据吗?对不起,我忘了是由dates@AMC:对不起,我试过了,但这是我尝试的结果。我和Python一样都是一个不折不扣的家伙(这里的第一个问题)。如何更好地共享数据?感谢您的帮助。@Ansev当数据连续时,此操作非常有效。非常感谢你!!但是,对于缺少特定时间戳的日子,它使用可用的第一个或最后一个日期时间戳。我想特别查找每个日期的0小时和23小时(用于创建每日度量)之间的差异。我试图在这里发布一些数据,但它没有以可用格式正确显示。那么,让我来编辑上面的问题。我只是在一个中等大小的数据上执行这个。对于2018-10-01,df中只有一个时间戳00:00的数据点。代码将此值用于00:00和23:00。如果00:00和23:00的具体数据不可用,我希望它显示NaN。