Как взять один столбец из DataFrame и добавить его в другой DataFrame на основе индекса? - PullRequest
1 голос
/ 20 марта 2019

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

Df1, который выглядит так:

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 

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

      Mi_Pollution.head()

      Sensor_ID      Time_Instant           Measurement
0     14121      2013-11-01 00:00:00        0.8
1     14121      2013-11-01 03:00:00        0.6
2     14121      2013-11-01 06:00:00        0.4
3     14121      2013-11-01 09:00:00        0.4
4     14121      2013-11-01 12:00:00         0

И что я хочусделать это, взять Sensor_Type столбец и добавить его в DF2 на основе Sensor_ID столбец, как желаемый выходной сигнал будет следующимone:

  Sensor_ID     Time_Instant        Measurement   Pollutants
0   20020    2015-11-01 00:00:00         0.3        Ammonia    
1   20020    2015-11-01 03:00:00         0.5        Ammonia
2   20020    2015-11-01 06:00:00         2.3        Ammonia
3   20020    2013-11-01 09:00:00         0.4        Ammonia
4   20020    2013-11-01 12:00:00          0         Ammonia

Есть предложения?Спасибо.

1 Ответ

1 голос
/ 20 марта 2019

вы можете использовать объединить , как это: (я адаптировал образец)

data1 = """
Sensor_ID     Sensor_Street_Name     Sensor_Lat     Sensor_Long    Sensor_Type   UOM      Time_Instant
14121   Milano-viaCarloPascal    45.478452      9.235016       Ammonia      µg/m      YYYY/MM/DD
17127   Milano-vialeMarche       45.496067      9.193023       Benzene      µg/m      YYYY/MM/DD_HH24:MI
17126   Milano-viaCarloPascal    45.478452      9.235016       Benzene      µg/m      YYYY/MM/DD_HH24:MI
6057    Milano-viaSenato         45.470780      9.197180       Benzene      µg/m      YYYY/MM/DD_HH24:MI
6062    Milano-P.zzaZavattari    45.476089      9.143509       Benzene      µg/m      YYYY/MM/DD_HH24:MI
   """
data2 = """
Sensor_ID,Time_Instant,Measurement
14121,2013-11-01 00:00:00,0.8        
14121,2013-11-01 03:00:00,0.6        
14121,2013-11-01 06:00:00,0.4        
14121,2013-11-01 09:00:00,0.4        
17127,2013-11-01 12:00:00,0
                """

import pandas as pd
df1 = pd.read_csv(pd.compat.StringIO(data1), sep='\s+')
df2 = pd.read_csv(pd.compat.StringIO(data2), sep=',')

s1 = pd.merge(df2, df1, how='left', on=['Sensor_ID'])

затем вы отбрасываете неиспользуемые столбцы из кадра данных s1 и переименовываете столбец Sensor_Type в Pollutants, а Time_Instant_x в Time_Instant

cols_to_delete = ['Sensor_Street_Name', 'Sensor_Lat','Sensor_Long','Time_Instant_y', 'UOM']
s1.drop(cols_to_delete, axis=1, inplace=True)
s1.rename(columns={'Time_Instant_x': 'Time_Instant', 'Sensor_Type': 'Pollutants'}, inplace=True)

с этим примером результата:

       Sensor_ID         Time_Instant  Measurement Pollutants
0      14121  2013-11-01 00:00:00          0.8    Ammonia
1      14121  2013-11-01 03:00:00          0.6    Ammonia
2      14121  2013-11-01 06:00:00          0.4    Ammonia
3      14121  2013-11-01 09:00:00          0.4    Ammonia
4      17127  2013-11-01 12:00:00          0.0    Benzene
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...