Python 熊猫:如何提取和计算“;小时”;数据帧中的每行

Python 熊猫:如何提取和计算“;小时”;数据帧中的每行,python,pandas,dataframe,feature-engineering,Python,Pandas,Dataframe,Feature Engineering,我有一个数据框,代表一些餐馆一周的时间表 我想做的是在我的初始数据框df中添加一列week\u hours,该列表示餐厅每周营业的总小时数。 注意:值0表示餐厅当天关闭 数据={ “餐厅id:['1'、'2'、'3'], “星期一”:['11:0-20:0'、'11:30-22:0'、'11:30-21:0'], “星期二”:['11:0-20:0'、'11:30-22:0'、'11:30-22:0'], “星期三”:['11:0-20:0'、'11:30-22:0'、'11:30-21:0

我有一个数据框,代表一些餐馆一周的时间表

  • 我想做的是在我的初始数据框
    df
    中添加一列
    week\u hours
    ,该列表示餐厅每周营业的总小时数。
注意:值0表示餐厅当天关闭

数据={
“餐厅id:['1'、'2'、'3'],
“星期一”:['11:0-20:0'、'11:30-22:0'、'11:30-21:0'],
“星期二”:['11:0-20:0'、'11:30-22:0'、'11:30-22:0'],
“星期三”:['11:0-20:0'、'11:30-22:0'、'11:30-21:0'],
‘星期四’:[‘11:0-20:0’、‘11:30-22:0’、‘11:30-21:0’],
‘星期五’:[‘11:0-22:0’、‘11:30-22:0’、‘11:30-21:0’],
‘星期六’:[‘11:0-22:0’、‘12:0-22:0’、‘0’],
“星期日”:['11:0-17:0','16:30-21:30','11:30-21:0',],
}
df=pd.DataFrame(数据,列=[“餐厅id”,“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期六”,“星期日”,“星期日])
df.head()

有什么简单的语法可以做到这一点呢?

您可以使用
apply
,有关更多信息,请参阅此答案


您可以使用
apply
,有关更多信息,请参阅此答案


一种方法是首先
转置
,然后创建自定义函数以
在计算前提取
值(请注意,这仅在小时数未超过24小时时有效,否则需要
时间增量
):


一种方法是首先
转置
,然后创建自定义函数以
在计算前提取
值(请注意,这仅在小时数未超过24小时时有效,否则需要
时间增量
):


如何将这些结果添加到df中的列中?
df[“new”]=df.set_index(“餐厅id”).T.apply(find_diff).to_numpy()
。如何将这些结果添加到我的df中的列中?
df[“new”]=df.set_index(“餐厅id”).T.apply(find_diff).to_numpy()
def calc_hours(ranges):
    # calc the hours in the ranges and sum

df['Weekly Hours'] = df.apply(lambda x: sum(calc_hours(x[day]) for day in ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']), axis=1)
def find_diff(col):
    data = col.str.extract(r"(\d*):(\d*)-(\d*):(\d*)").astype(float)
    hours = (data[2] - data[0]).sum()
    minutes = (data[3] - data[1]).sum()/60
    return hours+minutes

print (df.set_index("restaurant_id").T.apply(find_diff)) 

restaurant_id
1    64.0
2    67.5
3    58.0
dtype: float64