Получить индексы для выбранного значения - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть три кадра данных. One: базовая географическая информация домов, которую я хочу заполнить дополнительными данными. Два: Расстояния от домов (рядов) до одного из четырех источников (столбцов). Три: Соответствующий угол (0-360 градусов) от дома к источнику.

Один:

           X          Y    ...      Area_Cat        UID
0                          ...                         
1  142862.10  391169.10    ...             1  67321NY15 
2  143687.10  391063.10    ...             1   67321NY4 
3  144728.45  390877.88    ...             1   67321NY6 
4  144842.32  391811.89    ...             1   67321NY7
5  145386.77  392740.08    ...             1 67321NY147  

[5 rows x 11 columns]

Два:

         1        2        3        4
1  1807.04  1894.98  2135.75  2396.95
2  1801.63  1594.55  1606.38  1744.48
3  2323.27  1835.68  1485.06  1317.95
4   1692.7  1084.16  586.009  400.732
5  1880.35  1293.06  842.389  675.357

Три:

         1        2        3        4
1  201.011  220.827   236.11   245.66
2  174.359  195.045  216.163  231.166
3  148.368  160.013  176.392  193.942
4  128.085  136.861  159.281  210.549
5  93.5344  83.9145  63.1797  30.3033

Мне удалось добавить кратчайшее расстояние к фрейму данных, используя:

    for index, row in two.iterrows():
         one.loc[index,'Distance'] = min(row)

Результат:

           X          Y     ...              UID     Distance
0                           ...                              
1  142862.10  391169.10     ...       67321NY15   1807.043447
2  143687.10  391063.10     ...        67321NY4   1594.554866
3  144728.45  390877.88     ...        67321NY6   1317.947638
4  144842.32  391811.89     ...        67321NY7    400.732398
5  145386.77  392740.08     ...      67321NY147    675.356557

[5 rows x 12 columns]

Теперь я хочу добавитьсоответствующий угол также с именем столбца Orientation.Я хотел бы найти индексы столбцов и строк значения min(row) и использовать их для заполнения нового столбца значениями в третьем кадре данных.Я нашел селектор idxmin(), но несколько попыток потерпели неудачу.Вы можете мне помочь?

Желаемый результат:

           X          Y     ...              UID     Distance  Orientation
0                           ...                              
1  142862.10  391169.10     ...       67321NY15   1807.043447      201.011
2  143687.10  391063.10     ...        67321NY4   1594.554866      195.045
3  144728.45  390877.88     ...        67321NY6   1317.947638      193.942
4  144842.32  391811.89     ...        67321NY7    400.732398      210.549
5  145386.77  392740.08     ...      67321NY147    675.356557      30.3033

[5 rows x 12 columns]

1 Ответ

0 голосов
/ 25 сентября 2018

Я думаю, что использование idxmin и получение минимальных индексов из Two - хорошая идея!
Чтобы получить данные из других фреймов данных, таких как Three, используя индексы, я использовал pd.DataFrame.значения , понимание списка и zip .

# get the indexes of min values from Two
ix = two.idxmin(axis=1)
# result:
#     ix => [ 1, 2, 4, 4, 4 ]

# get the distance and orientation from Two and Three using the above indexes
_two = [two_val[i] for two_val, i in zip(two.values, ix)]
_three = [three_val[i] for three_val, i in zip(three.values, ix)]
# result:
#     _two => [ 1807.043447, 1594.554866, 1317.947638, 400.732398, 675.356557 ]
#     _three => [ 201.011, 195.045, 193.942, 210.549, 30.3033 ]

# append the result to One (be careful with the 0 index in One)
one["Distance"] = ””
one.loc[1:, ”Distance”] = _two
one["Orientation"] = ””
one.loc[1:, ”Orientation”] = _three

Здесь я использовал тот же подход для Two (получение значений с помощью вывода idxmin для Two), но вашоригинальный подход тоже работает.

РЕДАКТИРОВАТЬ: понимая, что dataframe One имеет 0-й индекс, я добавил туда пустую строку

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