Есть ли способ объединить эти две таблицы данных в python - PullRequest
0 голосов
/ 31 марта 2020

В таблице 1 содержится 800 000 записей

     End_time       DAY  Exceed  C_time   stn  max    start_time
2019-12-26 12:29:34 PROD -41.9   21.1     501  21.1   2019-12-26 12:29:13 
2019-12-26 12:30:59 PROD -10.3   52.7     501  52.7   2019-12-26 12:30:07 
2019-12-26 12:32:36 PROD -35.8   27.2     503  27.2   2019-12-26 12:32:09 
2019-12-26 12:33:54 PROD -53.3   9.7      504  9.7    2019-12-26 12:33:45 
2019-12-26 12:35:04 PROD -24.6   38.4     505  38.4   2019-12-26 12:34:26 

В таблице 2 содержится 300 000 записей

AlarmMessage  D_time Priority Station EquipID  Active Quality LineName   AlarmInTimeStamp
S501LH_B_RR_BT   2       1       501    2200505   True   192     BC1       2019-12-26 12:29:16.5608495 
SHT_B_S503_BEAM 21       1       503    2300249   True   192     BC1       2019-12-26 12:32:20.0634165  
S503LH_B_RR_T    2       1       503    2200505   True   192     BC1       2019-12-26 12:32:25.6494806 
SHT_B_S504_     21       1       504    2300256   True   192     BC1       2019-12-26 12:33:50.6719676 

, если таблица 2 "AlarmInTimeStamp" находится между таблицей 1 "start_time" и " End_time "и обе таблицы" station "одинаковы, тогда они должны быть объединены, чтобы я мог, наконец, посчитать, сколько аварийных сигналов, сгенерированных в течение временной метки, и суммы выходных данных D_time

будут равны

     End_time       DAY  Exceed  C_time   stn  max    start_time           AlarmMessage     D_time
2019-12-26 12:29:34 PROD -41.9   21.1     501  21.1   2019-12-26 12:29:13  S501LH_B_RR_BT     2
2019-12-26 12:30:59 PROD -10.3   52.7     501  52.7   2019-12-26 12:30:07       -             -
2019-12-26 12:32:36 PROD -35.8   27.2     503  27.2   2019-12-26 12:32:09  SHT_B_S503_BEAM    21
                                                                           S503 LH_B_RR_T     2
2019-12-26 12:33:54 PROD -53.3   9.7      504  9.7    2019-12-26 12:33:45  SHT_B_S504         21   
2019-12-26 12:35:04 PROD -24.6   38.4     505  38.4   2019-12-26 12:34:26         -           -

1 Ответ

0 голосов
/ 01 апреля 2020

вы можете решить это решение, используя pandas и умножение матрицы

import pandas as pd
# Attempt #5: Use python and the pandas package
# create the pandas Data Frames (kind of like R data.frame)
myDataDF = pd.DataFrame({'Record':range(1,6), 'SomeValue':[10, 8, 14, 6, 2]})
linkTableDF = pd.DataFrame({'ValueOfInterest':['a', 'b', 'c'], 'LowerBound': [1, 4, 10],
'UpperBound':[3, 5, 16]})
# set the index of the linkTable (kind of like setting row names) 
linkTableDF = linkTableDF.set_index('ValueOfInterest')
# now apply a function to each row of the linkTable
# this function checks if any of the values in myData are between the upper
# and lower bound of a specific row thus returning 5 values (length of myData)
mask = linkTableDF.apply(lambda r: myDataDF.SomeValue.between(r['LowerBound'], 
r['UpperBound']), axis=1)
# mask is a 3 (length of linkTable) by 5 matrix of True/False values
# by transposing it we get the row names (the ValueOfInterest) as the column names
mask = mask.T
# we can then matrix multiply mask with its column names
myDataDF['ValueOfInterest'] = mask.dot(mask.columns)

Что в вашем случае вы можете использовать

mask = table.apply(lambda r: table2.AlarmInTimeStamp.between(r['start_time'], 
r['End_time']), axis=1)

или, альтернативно, вы можете использовать SQL для ваши таблицы

источники: https://www.mango-solutions.com/in-between-a-rock-and-a-conditional-join/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...