Python 使用引用数据帧从另一个数据帧获取值并应用计算
我有两个数据框一个数据框包含四个列名,分别为字段名、字段类型、单位度量和资产名。另一个数据帧包含单行中的所有字段_名称以及另一行中相应的值。 一个例子Python 使用引用数据帧从另一个数据帧获取值并应用计算,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据框一个数据框包含四个列名,分别为字段名、字段类型、单位度量和资产名。另一个数据帧包含单行中的所有字段_名称以及另一行中相应的值。 一个例子 import pandas as pd df1 = pd.DataFrame({'Field_Name' : ['W_LD(1)', 'R_LD(3)', 'WMEAS_LD(1)', 'WMEAS_LD(2)','W_LN(1)','WMEAS_LN(1)'], 'Field_Type' : [est,
import pandas as pd
df1 = pd.DataFrame({'Field_Name' : ['W_LD(1)', 'R_LD(3)', 'WMEAS_LD(1)', 'WMEAS_LD(2)','W_LN(1)','WMEAS_LN(1)'],
'Field_Type' : [est, est, meas, meas,est,meas],
'Unit' : ['mw', 'mv', 'mw', 'mw','mw','mw'],
'Asset_Name' : ['LD(1)', 'LD(3)', 'LD(1)', 'LD(2)','LN(1)','LN(1)']})
Second Dataframe [all the infromation rowwise]
import pandas as pd
df2=pd.Dataframe({['Device_names','W_LD(1)','R_LD(3)','WMEAS_LD(1)','WMEAS_LD(2)','W_LN(1)','WMEAS_LN(1)'],
['Timestamp','2.2','3.3','1.2','3.4','2.3','4.5']})
现在,我们有两个数据帧。
因此,基本上,我必须检查字段类型是否为估计值或测量值,如果LD(1)和单位为“mw”或“mv”,则为资产名称
基于这些条件,我必须从第二个数据帧中提取W_LD(1)和WMEAS_LD(1),并减去这两个值,然后输出为(3.4-2.2)=1.2。这是针对一个设备的,类似地,我必须针对多个设备执行此操作。如果您的
数据帧是:
df1 = pd.DataFrame({'Field_Name' : ['W_LD(1)', 'R_LD(3)', 'WMEAS_LD(1)', 'WMEAS_LD(2)','W_LN(1)','WMEAS_LN(1)'],
'Field_Type' : ['est', 'est', 'meas', 'meas','est','meas'],
'Unit' : ['mw', 'mv', 'mw', 'mw','mw','mw'],
'Asset_Name' : ['LD(1)', 'LD(3)', 'LD(1)', 'LD(2)','LN(1)','LN(1)']})
df2=pd.DataFrame({'Device_names':['W_LD(1)','R_LD(3)','WMEAS_LD(1)','WMEAS_LD(2)','W_LN(1)','WMEAS_LN(1)'],
'Timestamp':['2.2','3.3','1.2','3.4','2.3','4.5']})
1.解决方案。
groups=df1.groupby(df1['Asset_Name'])
df1['Timestamp']=df1['Field_Name'].map(df2.set_index('Device_names')['Timestamp'])
df1['Timestamp']=[float(key) for key in df1['Timestamp']]
df1.sort_values('Timestamp',inplace=True)
df1.reset_index(drop=True,inplace=True)
df1['subtract']=groups['Timestamp'].diff()
df1['subtract']=groups['subtract'].transform('first')
2.解释。
groups=df1.groupby(df1['Asset_Name'])
df1['Timestamp']=df1['Field_Name'].map(df2.set_index('Device_names')['Timestamp'])
df1['Timestamp']=[float(key) for key in df1['Timestamp']]
df1.sort_values('Timestamp',inplace=True)
df1.reset_index(drop=True,inplace=True)
df1['subtract']=groups['Timestamp'].diff()
df1['subtract']=groups['subtract'].transform('first')
要计算每组的减法,请执行以下操作:
groups=df1.groupby(df1['Asset_Name'])
首先,在df1
中按正确顺序插入时间戳
列,使用。
订单使用用正号进行减法
df1['Timestamp']=df1['Field_Name'].map(df2.set_index('Device_names')['Timestamp'])
df1['Timestamp']=[float(key) for key in df1['Timestamp']]
df1.sort_values('Timestamp',inplace=True)
df1.reset_index(drop=True,inplace=True)
然后使用:
然后使用:
df1['subtract']=groups['subtract'].transform('first')
print(df1)
Field_Name Field_Type Unit Asset_Name Timestamp subtract
0 WMEAS_LD(1) meas mw LD(1) 1.2 1.0
1 W_LD(1) est mw LD(1) 2.2 1.0
2 W_LN(1) est mw LN(1) 2.3 2.2
3 R_LD(3) est mv LD(3) 3.3 NaN
4 WMEAS_LD(2) meas mw LD(2) 3.4 NaN
5 WMEAS_LN(1) meas mw LN(1) 4.5 2.2