根据不同列的值对数据框执行查找

有这样的数据框 -


df = {'Request': [0, 0, 1, 0, 1, 0, 0],

 'Time': ['16:00', '17:00', '18:00', '19:00', '20:00', '20:30', '24:00'],

 'grant': [3, 0, 0, 5, 0, 0, 5]}


pd.DataFrame(df).set_index('Time')


    Out[16]: 

       Request  grant

Time                 

16:00        0      3

17:00        0      0

18:00        1      0

19:00        0      5

20:00        1      0

20:30        0      0

24:00        0      5

“请求”列中的值是布尔值,表示是否提出了请求。1 = 请求 0 = 无请求。“授予”列中的值表示初始授予大小。


我想计算每个请求的请求和授权之间的时间。所以在这种情况下,他们将是 19:00 - 18:00 = 1 小时和 24:00-20:00 = 4 小时。有没有办法使用 pandas 轻松地对大型数据集执行此操作?


噜噜哒
浏览 81回答 2
2回答

慕妹3242003

我会这样做:df = {'Request': [0, 0, 1, 0, 1, 0, 0],     'Time': ['16:00', '17:00', '18:00', '19:00', '20:00', '20:30', '24:00'],     'grant': [3, 0, 0, 5, 0, 0, 5]}df = pd.DataFrame(df) #create DataFrame#get rid of any rows have neither a grant nor requestdf = df[(df[['grant', 'Request']].T != 0).any()] #change the time in HH:MM to number of minutesdf['Time'] = df['Time'].str.split(":").apply(lambda x: int(x[0])*60 + int(x[1]))#get the difference between those timesdf['timeElapsed'] = df['Time'].diff()#filter out the requests to only get the grants and their times. #Also, drop the NA from the first line.df = df[(df[['grant']].T != 0).any()].dropna()#drop all columns except timeElapsed and Grantdf = df[['timeElapsed', 'grant']]那么输出看起来像这样,timeElaped 以分钟为单位:   timeElapsed  grant3         60.0      56        240.0      5

一只斗牛犬

您首先需要将您的Time索引转换为可减去的东西以找到时间增量。使用pd.to_timestamp不起作用,因为没有24:00. 下面的解决方案使用十进制时间(1:30PM = 13.5):# Convert the index into decimal timedf.index = pd.to_timedelta(df.index + ':00') / pd.Timedelta(hours=1)# Get time when each request was mader = df[df['Request'] != 0].index.to_series()# Get time where each grant was madeg = df[df['grant'] != 0].index.to_series()# `asof` mean "get the last available value in `r` as the in `g.index`tmp = r.asof(g)df['Delta'] = tmp.index - tmp结果:      Request  grant  DeltaTime                       16.0        0      3    NaN17.0        0      0    NaN18.0        1      0    NaN19.0        0      5    1.020.0        1      0    NaN20.5        0      0    NaN24.0        0      5    4.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python