В отсутствие ваших данных я придумал некоторые случайные данные, которые отражают, как я понимаю, структуру ваших.
Приведенный ниже код работает и дает вам то, что, как вам кажется, вы ищете. Это похоже на то, что вы, похоже, сделали, поэтому я могу только догадываться, что в структуре ваших данных должны быть некоторые ошибки.
Это будет звучать очень банально, но вы убедились, что есть показания и для других датчиков (ветер и т. Д.)? Судя по выходным данным, показания имеются только для осадков.
Ваш «желаемый результат» не имеет смысла, поскольку он показывает, что один и тот же идентификатор датчика регистрирует дождь и влажность; но вы сказали, что каждый идентификатор датчика связан только с одним типом датчика!
например. может быть, «идентификатор датчика» не является первичным ключом после примененных вами формул? Посмотрите на эти понятия здесь: https://www.essentialsql.com/what-is-the-difference-between-a-primary-key-and-a-foreign-key/ или в одном из триллионов ресурсов, доступных онлайн. Проверьте структуру ваших данных.
Не хочу звучать как битая запись, но опять же: первичные и внешние ключи! Вы действительно действительно должны понимать структуру ваших данных.
Если, пройдя через эти концепции и просмотрев ваши данные, вы все еще не видите, что с ними не так, вы можете попробовать загрузить данные в Dropbox или что-то подобное, разместив ссылку здесь и надеясь, что некоторым из нас хватит время пройти через это.
import numpy as np
import pandas as pd
import random
num_sensors=int(100)
sensors= pd.DataFrame()
sensors['sensor id']=np.arange(0,num_sensors)
sensors['address id'] =np.arange(1000,1000+num_sensors)
#;ambda function not efficient on large datasets but irrelevant here
sensors['type']= sensors.apply( lambda x: "".join( [random.choice(['rain','temp','wind']) ] ), axis=1 )
num_measurements = 10
meas = pd.DataFrame()
meas['sensor id']= np.repeat(sensors['sensor id'], num_measurements )
meas['time'] = np.tile( np.arange(0,num_measurements ), num_sensors )
meas['value'] =np.random.rand(num_measurements * num_sensors )
#otherwise the index is copied from the other dataframe, so is not unique
meas=meas.reset_index(drop=True)
joined = pd.merge(sensors, meas, how='outer', on='sensor id')
pt = joined.pivot_table( index= ['sensor id','address id','time'], columns=['type'], values=['value'] ).reset_index()