如何检索对应名称的值以在方程式中作为python中df中的新列进行计算

问题描述 投票:0回答:2

这是我现在拥有的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
python pandas list csv
2个回答
1
投票

首先将您的onTimeoffTime强制转换为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

1
投票

加入亨利的答案

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)
© www.soinside.com 2019 - 2024. All rights reserved.