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

Допустим, у меня есть два следующих кадра данных панд:

DF1
id    n_id    col1    col2   col3    ...
1     1       ...     ...    ...
2     1       ...     ...    ...
3     2       ...     ...    ...
4     2       ...     ...    ...
5     4       ...     ...    ...
6     4       ...     ...    ...


DF2
id    n_id    col1    col2   col3    ...
1     1       ...     ...    ...
2     1       ...     ...    ...
3     3       ...     ...    ...
4     3       ...     ...    ...
5     4       ...     ...    ...
6     4       ...     ...    ...

Теперь я хочу inner соединить эти два кадра данных на n_id и соединить каждый n_id свсе значения получены из результата пользовательской функции combine(DF1_n_id, DF2_n_id), поэтому мой результат выглядит следующим образом:

DF_mix
id            n_id    col1    col2   col3    ...
1              1        \       |      /
...           ...       -    df1_mix   -   
s1_mix         1        /       |      \
s1_mix+1       4        \       |      /
...           ...       -    df4_mix   -
s4_mix+s1_mix  4        /       |      \

где:

dfi_mix = combine(DF1[n_id == i], DF2[n_id == i])
si_mix = n_rows(df1_mix)

Я не могу найти наиболее эффективнуюрешение.Сначала я думал о слиянии, но это привело к появлению чего-то вроде картезианского произведения на общих ценностях.Затем я попытался объединить группу по элементам на n_id, но это невозможно.Заранее спасибо!

Примечания:
1. Индекс следует игнорировать.
2. DF1[n_id == i] может состоять только из столбцов (т. Е. col1, col2, col3, ...)
3. Все кадры данныхимеют одинаковые столбцы (то есть id, n_id, col1, col2, col3, ...)
4. id обозначает индекс по умолчанию, назначенный пандами

Глупый пример:

DF1
id    n_id    a    b   
1     1       1    1 
2     1       1    1 
3     2       1    2
4     2       1    2
5     4       1    4
6     4       1    4


DF2
id    n_id    a   b
1     1       2   1
2     1       2   1
3     3       2   3
4     3       2   3
5     4       2   4
6     4       2   4

combine(df1, df2) = pd.concat

DF_mix
id  n_id  a  b
1   1     1  1
2   1     1  1
3   1     2  1
4   1     2  1
5   4     1  4
6   4     1  4
7   4     2  4
8   4     2  4

Конечно concat можно заменить на что угодно, если он возвращает DataFrame столбцов a,b.

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