Как добавить новый столбец в фрейм данных на основе строк другого фрейма данных? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть два кадра данных:

DF1 (что я только что пересчитал):

 Mi_pollution.head():



   Sensor_ID     Time_Instant    Measurement
0    10273   2013-11-01 00:00:00    46
1    10273   2013-11-01 01:00:00    51
2    10273   2013-11-01 02:00:00    39
3    10273   2013-11-01 03:00:00    30
4    10273   2013-11-01 04:00:00    37

И у меня есть DF2:

Pollutants.head():

    Sensor_ID     Sensor_Street_Name    Sensor_Lat  Sensor_Long  Sensor_Type   UOM   Time_Instant
 0  20020   Milano -via Carlo Pascal    45.478452   9.235016     Ammonia       µg/m   YYYY/MM/DD
 1  17127   Milano - viale Marche       45.496067   9.193023     Benzene       µg/m   YYYY/MM/DD HH24:MI
 2  17126   Milano -via Carlo Pascal    45.478452   9.235016     Benzene       µg/m   YYYY/MM/DD HH24:MI
 3  6057    Milano - via Senato         45.470780   9.197180     Benzene       µg/m   YYYY/MM/DD HH24:MI
 4  6062    Milano - P.zza Zavattari    45.476089   9.143509     Benzene       µg/m   YYYY/MM/DD HH24:MI

И чтоЯ пытаюсь сделать, это создать новые столбцы на основе загрязнителей и добавить их в DF1 и назначить каждое измерение на основе датчика, как это:

 Sensor_ID    Time_Instant      Ammonia    Benzene   Nitrogene  …...
0   20020   2013-12-01 00:00:00   4.8       Nan       Nan
1   20020   2013-12-01 01:00:00   5.3       Nan       Nan
2   20020   2013-12-01 02:00:00   3.0       Nan       Nan
.
.
56  14330   2013-11-01 00:00:00   Nan      6.3        Nan
57  14330   2013-11-01 01:00:00   Nan      5.3        Nan
.
. 

Любое предложение будет высоко ценится,Спасибо всем.

1 Ответ

0 голосов
/ 22 марта 2019

Предполагая, что вы присоединяетесь к Sensor_ID (в приведенном вами небольшом примере нет общих Sensor_IDs между двумя кадрами данных), вы можете объединить dfs на Sensor_ID (и, возможно, Time_Instant?).

Затем вы можете использовать pivot_table для транспонирования значений строк (Sensor_Type) в заголовки столбцов, а затем заполнить значения строк с помощью Measurement.

Например: df3 = df1.merge(df2, on='Sensor_ID', how='left')\ .pivot_table(index=['Sensor_ID','Sensor_Street_Name','Other columns'], values='Measurement', columns='Sensor_Type')\ .reset_index()

...