объединение двух фреймов данных на основе двух столбцов значений - PullRequest
0 голосов
/ 29 ноября 2018

Я занимаюсь проектом машинного обучения и сейчас занимаюсь обработкой данных.Во всяком случае, у меня есть два кадра данных, как показано -

   Final_Lat   Final_Lot  Label
0   37.23140    -121.75853  1.0
1   37.34883    -121.88834  1.0
2   37.31835    -121.85878  1.0
3   37.26027    -121.87655  1.0
4   37.30793    -121.79955  1.0
5   37.24895    -121.87519  1.0


   TestLat      TestLot
0   37.20000    -122.00000
1   37.20000    -121.99999
2   37.20000    -121.99998
3   37.20000    -121.99997
4   37.20000    -121.99996
5   37.20000    -121.99995
6   37.20000    -121.99994
7   37.20000    -121.99993

Я хочу переместить метки 1 в координату, появившуюся в том же списке, которая будет выглядеть примерно так.и он также должен содержать информацию из второго фрейма данных.

Final_Lat   Final_Lot  Label
0   37.23140    -121.75853  1.0
1   37.34883    -121.88834  1.0
2   37.31835    -121.85878  1.0
3   37.20000    -122.00000  nan
4   37.20000    -121.99999  nan
2   37.20000    -121.99998  nan

Я устал

left = pd.DataFrame({'Final_Lat': Trian['Lat'].apply(float), 
                     'Final_Lot': Trian['Lot'].apply(float),
                     'Label': Trian['L'].apply(float),})

right = pd.DataFrame({'Final_Lat': Fullcoordinate['TestLat'].apply(float), 
                      'Final_Lot': Fullcoordinate['TestLot'].apply(float)})

Final_result = pd.merge(left, right, how='right',on=['Final_Lot','Final_Lat'])

И это не сработало.Буду признателен за любую помощь!

right = pd.DataFrame({'Final_Lat': Fullcoordinate['TestLat'](lambda x: pd.to_numeric(x, errors='coerce')).mul(1000).fillna(0).astype(int) , 
                      'Final_Lot': Fullcoordinate['TestLot'](lambda x: pd.to_numeric(x, errors='coerce')).mul(1000).fillna(0).astype(int) })

1 Ответ

0 голосов
/ 29 ноября 2018

Таким образом, проблема здесь заключается в слиянии со значениями float, потому что для точности я предлагаю преобразовать столбцы, кратные 1000, и преобразовать в целые числа и merge по этим новым столбцам:

old_cols = ['Final_Lat','Final_Lot']
new_cols = ['Final_Lat_int','Final_Lot_int']

Trian[new_cols] = Trian[old_cols].mul(1000).astype(int)
Final_Lat[new_cols] = Final_Lat[old_cols].mul(1000).astype(int)

Если возможна проблемапри invalid literal for int возможны некоторые нечисловые значения, одно из возможных решений - преобразовать их в NaN, а затем в 0:

Trian[new_cols] = Trian[old_cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).mul(1000).astype(int)
Final_Lat[new_cols] = Final_Lat[old_cols].apply(lambda x: pd.to_numeric(x, errors='coerce')).mul(1000).astype(int)

Final_result = pd.merge(Trian.drop(old_cols, axis=1),  
                        Final_Lat,
                        how='right',
                        on=new_cols)
print (Final_result)
   Label  Final_Lat_int  Final_Lot_int  Final_Lat  Final_Lot
0    NaN          37200        -122000       37.2 -122.00000
1    NaN          37200        -121999       37.2 -121.99999
2    NaN          37200        -121999       37.2 -121.99998
3    NaN          37200        -121999       37.2 -121.99997
4    NaN          37200        -121999       37.2 -121.99996
5    NaN          37200        -121999       37.2 -121.99995
6    NaN          37200        -121999       37.2 -121.99994
7    NaN          37200        -121999       37.2 -121.99993
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...