Допустим, у меня есть два следующих кадра данных панд:
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
.