问题描述
设备 | volume1 | volume2 | 时间 |
---|---|---|---|
device_id | x | y | time_devicemessage |
每个表用于一个设备,所以我有 4 个设备,它们以不同的时间戳发送消息。
我想知道如何将这 4 个表合并为 1 个,但仅根据时间戳显示每个表中最后一个 volume 数据的查询。
所以它可能看起来像这样:
设备 | volume1 | volume2 | 时间 |
---|---|---|---|
设备A | 最后一个值 (x) | 最后一个值 (y) | time_devicemessageA |
设备B | 最后一个值 (x) | 最后一个值 (y) | time_devicemessageB |
设备C | 最后一个值 (x) | 最后一个值 (y) | time_devicemessageC |
设备编号 | 最后一个值 (x) | 最后一个值 (y) | time_devicemessageD |
非常感谢您的支持,我将非常感谢您的帮助!
问候,鲁本。
解决方法
你可以得到每个表的最后一行,然后联合这四行,就像这样:
SELECT device,volume1,volume2,time FROM device1 ORDER BY time DESC LIMIT 1
UNION
SELECT device,time FROM device2 ORDER BY time DESC LIMIT 1
UNION
SELECT device,time FROM device3 ORDER BY time DESC LIMIT 1
UNION
SELECT device,time FROM device4 ORDER BY time DESC LIMIT 1;
,
我相信你想要的语法是:
import numpy as np
import pandas as pd
import shap
from sklearn.linear_model import LinearRegression
X = df.loc[:,df.columns.str.startswith(('Q27'))]
features = df.loc[:,df.columns.str.startswith(('Total','Q25C','Loyal','Image'))]
w = df.loc[:,df.columns.str.startswith(('WEIGHT_Both'))]
def reg_loop(X,w,features,label):
y = features[label]
rm_indx_X = list(X.dropna().index)
X = X.loc[rm_indx_X]
y = y.loc[rm_indx_X]
w = w.loc[rm_indx_X]
lm = LinearRegression()
fit = lm.fit(X,y,sample_weight = w['WEIGHT_Both'])
explainer = shap.LinearExplainer(fit,X,feature_dependence="independent")
shap_values = explainer.shap_values(X)
shap_values_abs = np.absolute(shap_values)
means_norm = shap_values_abs.mean(axis = 0)/1
idx = np.argsort(means_norm)
means = np.array(means_norm)[idx]
return(means)
pred_df = pd.DataFrame({i: reg_loop(X,i) for i in features.columns},X.columns.values.tolist(),columns = features.columns)
pred_df
请注意,将相似的信息存储在四个不同的表中被认为是一种糟糕的数据设计。最好将所有数据放在一张表中。