Так что моя проблема может быть наивной, но я долго искал и все еще не могу найти ответ.У меня есть два больших набора данных:
Один - это файл переписи, содержащий более 700 000 записей.
Lastname Census 1stname Census census_year
C2last C2first 1880
C3last C3first 1850
C4last C4first 1850
Другой пример представляет собой регистр актов гражданского состояния, состоящий из 80 000 наблюдений.
Lastname Reg 1stname reg birth_year
P2Last P2first 1818
P3last P3first 1879
P4last P4first 1903
Мне нужно выполнить декартово произведение обоих наборов данных, которое, очевидно, представляет собой огромный файл (700 000 x 80 000), где для каждой строки переписи мы должны бытьдобавив 80000 регистров гражданского состояния с дополнительной переменной.
Значения этой дополнительной переменной удовлетворяют условию.Условие состоит в том, что год переписи (переменная переписи) больше, чем переменная 'год рождения' в реестрах актов гражданского состояния (или, другими словами, год переписи моложе, чем число рожденных в реестре).
Как я уже сказал, цель состоит в том, чтобы сделать декартово произведение, но добавив дополнительную переменную (флаг), которая дает «1» при выполнении условия (год переписи> год рождения) или «0», когдане:
LastNCens 1stNCens cens_year LastNamReg 1stNamReg birth Flag
C2last C2first 1880 P2Last P2first 1818 1
P3last P3first 1879 1
P4last P4first 1903 0
C3last C3first 1850 P2Last P2first 1818 1
P3last P3first 1879 0
P4last P4first 1903 0
C4last C4first 1860 P2Last P2first 1818 1
P3last P3first 1879 0
P4last P4first 1903 0
Все это, учитывая, что продукт слишком велик.
Я пробовал много вещей (сравнивать, различать, пересекать), и я читал и другие вещи.что я не мог применить (df.where
, pd.merge
), но они не делают то, что мне нужно, и я не могу использовать их здесь.Мой простой подход был бы следующим:
cp <- merge(census, register,by=NULL);
final.dataframe <- cp [which (cp$census_year > cp$birth_year_hsn ),]
Но R не хватает памяти.
Само собой разумеется, что результирующий фрейм данных (декартово произведение) также будет действительным только с темизаписи, помеченные как '1' (избавление от записей с Flag='0'
).
Я надеюсь, что это хорошо объяснено и также полезно для других людей ... Большое спасибо за любой совет.Это очень приветствуется.