这是我现在拥有的df:
type onTime offTime device
0 Light1 2019-10-28 10:30:23 2019-10-28 10:30:23 8655
1 Light2 2019-10-28 10:20:23 2019-10-28 11:30:23 8222
2 Fan1P3 2019-10-28 12:30:23 2019-10-28 12:45:23 8702
3 Heater1 2019-10-28 15:30:23 2019-10-28 16:30:23 8204
4 Kettle1 2019-10-28 18:30:23 2019-10-28 20:30:23 8750
这是相应类型的值的库:
type device power
0 Light1 8655 30
1 Light2 8222 45
2 Fan1P3 8702 102
3 Heater1 8204 1200
4 Kettle1 8750 2000
我正在尝试将设备与库匹配并在df中键入以检索功率,以使用它通过以下公式计算总功率:
duration = offTime - onTime
totalpower = duration * power
首先将您的onTime
和offTime
强制转换为Datetime
:
df1[["onTime","offTime"]] = df1[["onTime","offTime"]].apply(pd.to_datetime)
然后您可以轻松计算出差异:
df1["duration"] = (df1["offTime"]-df1["onTime"]).dt.total_seconds() # I assume you are calculating base on total seconds
最后通过将列type
映射到df2
:来计算您的总数:
df1["total"] = df1["duration"]*(df1["type"].map(dict(df2[["type","power"]].values)))
print (df1)
结果:
type onTime offTime device duration total
0 Light1 2019-10-28 10:30:23 2019-10-28 10:30:23 8655 0.0 0.0
1 Light2 2019-10-28 10:20:23 2019-10-28 11:30:23 8222 4200.0 189000.0
2 Fan1P3 2019-10-28 12:30:23 2019-10-28 12:45:23 8702 900.0 91800.0
3 Heater1 2019-10-28 15:30:23 2019-10-28 16:30:23 8204 3600.0 4320000.0
4 Kettle1 2019-10-28 18:30:23 2019-10-28 20:30:23 8750 7200.0 14400000.0
加入亨利的答案
import pandas as pd
dict1 = {'type':['Light1','Light2','Fan1P3','Heater1','Kettle1'],
'onTime': ['2019-10-28 10:30:23','2019-10-28 10:20:23', '2019-10-28 12:30:23',
'2019-10-28 15:30:23', '2019-10-28 18:30:23'],
'offTime': ['2019-10-28 10:30:23', '2019-10-28 11:30:23', '2019-10-28 12:45:23',
'2019-10-28 16:30:23', '2019-10-28 20:30:23'], 'device': ['8655','8222','8702',
'8204','8750']}
dict2 = {
'type':['Light1','Light2','Fan1P3','Heater1','Kettle1'],
'device': ['8655','8222','8702','8204','8750'],
'power': [30, 45, 102, 1200, 2000]
}
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df1[["onTime","offTime"]] = df1[["onTime","offTime"]].apply(pd.to_datetime)
df = df1.merge(df2,how='inner', on=['type','device'])
df['duration'] = (df['offTime'] - df['onTime']).dt.total_seconds()
df['energy'] = df['duration'] * df['power']
print(df)