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

У меня есть вопрос, касающийся разбиения фреймов данных.У меня есть два фрейма данных: halo_field с индексами 3447, 4024 ...

           H_masa  N_subs      ...                 H_z             rh
3447  1.066437e+11       1      ...        88419.632812  160354.430049
4024  4.423280e+11       1      ...        49013.289062   65239.433084
4958  3.171903e+11       1      ...        23239.701172   48248.401956
5749  2.817211e+11       1      ...        46585.765625   65032.216212
6512  2.471275e+11       1      ...        93403.398438  123058.838527

, и у меня есть субхало для фрейма данных с одним из столбцов с именем 'halo_index', индексирующим в гало фрейма данных, из которого срез halo_field является срезом (таким образом, у нас есть такие индексы halo_field) - это распечатка subhalo.halo_index (справа):

0                0
1                0
2                0
3                0
4                0
            ...   
4366516    7713551
4366517    7713552
4366518    7713553

Я хотел бы нарезать субхалофрейм данных в субхало_файл данных, чтобы он содержал только строки со столбцом halo_indexзначение, которое также содержится в halo_field.index.Проблема в том, что, конечно, эти два столбца не имеют одинаковую длину, и я не могу сделать это следующим образом (сравнение строки со строкой и сравнение всех значений одного столбца со всеми значениями другого):

subhalo_field=subhalo[subhalo.halo_index==halo_field.index].copy()

Я получаю эту ошибку:

File "group_sh.py", line 139, in <module>
subhalo_field=subhalo[subhalo.halo_index==halo_field.index].copy()
File "/usr/local/lib/python2.7/dist-packages/pandas/core/ops.py", line 1223, in wrapper
raise ValueError('Lengths must match to compare')
ValueError: Lengths must match to compare

Как я могу нарезать свой субгало-фрейм данных, чтобы я мог сравнить subhalo.halo_index с halo_field.index и скопировать только те субхало в subhalo_fields, которые имеют механизмы halo_index и halo_field.index?

Ответы [ 2 ]

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

Я нашел решение:

subhalo_field=subhalo[subhalo.halo_index.isin(halo_field.index)].copy()
0 голосов
/ 29 октября 2018

Если я вас правильно понимаю, то merge в индексе halo_field и столбце halo_index в subhalo может быть тем, что вы ищете (по умолчанию используется внутреннее соединение):

halo_field.merge(subhalo, left_index=True, right_index=False, right_on='halo_index')
...