首页 > 解决方案 > 如何检索相应名称的值以在方程式中将其计算为python中df中的新列

问题描述

这是我现在拥有的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

标签: pythonpandaslistcsv

解决方案


首先强迫你onTime和:offTimeDatetime

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

推荐阅读