#python #dataframe #pyspark #key #sampling
#python #фрейм данных #pyspark #Клавиша #выборка
Вопрос:
У меня есть два фрейма данных df1 и df2. Ниже приведены примеры:
df1:
LSOA SEX AGE LADY COUNT WEIGHT
E9001 1 0 D0901 7 0.045
E9001 1 0 D0901 5 0.34
E9002 1 0 D0901 13 0.062
E9002 1 0 D0901 2 0.12
E9003 1 0 D0901 9 0.024
E9001 1 1 D0901 8 0.11
E9001 1 1 D0901 3 0.027
E9002 1 1 D0901 4 0.67
E9002 1 1 D0901 12 0.029
E9003 1 1 D0901 1 0.084
E9001 1 2 D0901 21 0.19
E9001 1 2 D0901 11 0.45
E9002 1 2 D0901 9 0.078
E9002 1 2 D0901 5 0.029
E9003 1 2 D0901 24 0.49
E9001 2 0 D0901 18 0.062
E9001 2 0 D0901 10 0.12
E9002 2 0 D0901 14 0.0126
E9002 2 0 D0901 4 0.52
E9003 2 0 D0901 31 0.0769
E9001 2 1 D0901 6 0.107
E9001 2 1 D0901 8 0.075
E9002 2 1 D0901 9 0.029
E9002 2 1 D0901 15 0.081
E9003 2 1 D0901 4 0.31
E9001 2 2 D0901 10 0.049
E9001 2 2 D0901 19 0.51
E9002 2 2 D0901 9 0.074
E9002 2 2 D0901 2 0.18
E9003 2 2 D0901 18 0.073
E9004 1 0 D0902 14 0.017
E9004 1 0 D0902 2 0.085
E9005 1 0 D0902 16 0.72
E9005 1 0 D0902 15 0.13
E9006 1 0 D0902 1 0.031
E9004 1 1 D0902 2 0.162
E9004 1 1 D0902 17 0.041
E9005 1 1 D0902 14 0.698
E9005 1 1 D0902 3 0.0932
E9006 1 1 D0902 4 0.62
E9004 1 2 D0902 31 0.0231
E9004 1 2 D0902 21 0.237
E9004 1 2 D0902 2 0.019
E9005 1 2 D0902 0 0.17
E9005 1 2 D0902 19 0.017
E9006 1 2 D0902 38 0.371
E9011 2 0 D0902 24 0.619
E9011 2 0 D0902 51 0.926
E9012 2 0 D0902 11 0.097
E9012 2 0 D0902 41 0.48
E9014 2 0 D0902 2 0.093
E9011 2 1 D0902 20 0.017
E9011 2 1 D0902 21 0.19
E9012 2 1 D0902 41 0.38
E9012 2 1 D0902 27 0.042
E9014 2 1 D0902 52 0.18
E9011 2 2 D0902 17 0.254
E9011 2 2 D0902 38 0.0721
E9012 2 2 D0902 4 0.623
E9012 2 2 D0902 19 0.0389
E9014 2 2 D0902 44 0.25
и фрейм данных df2:
LADY SEX AGE N
D0901 1 0 1
D0901 1 1 0
D0901 1 2 2
D0901 2 0 3
D0901 2 1 1
D0902 1 0 4
D0902 1 1 1
D0902 1 2 2
D0902 2 0 3
D0902 2 1 1
где столбцы LADY, SEX, AGE — это страта (ключи), а WEIGHT — значения, каждое из которых находится в диапазоне от 0.0 до 1.0.
Я хочу взять N выборок strata = [LADY, ПОЛ, ВОЗРАСТ] df1, без замены, используя df2 в качестве нескольких ключей (слоев).
Есть ли способ выполнить эту стратифицированную выборку без замены, используя вес столбца как вероятность включения этой страты (или строки) в выборки, используя pyspark?
Итак, я получаю фрейм данных df3, содержащий N строк df1 на слои.
Я понимаю, что pyspark использует дроби вместо целых чисел и что для каждой выборки может быть применен предел. Однако я хотел бы иметь разные ограничения для каждой страты, используя столбец N в df2.
Я надеюсь, что это имеет смысл. Большое спасибо.
Комментарии:
1. не могли бы вы уточнить, что вы подразумеваете под «использованием веса столбца как вероятности включения этой страты (или строки) в выборки», например, в четвертой страте LADY SEX AGE D0901 2 0 У вас есть 5 потенциальных записей с весами (0.062, 0.12, 0.0126, 0.52, 0.0769). Вы хотите, чтобы запись с весом 0,12 появлялась в 12% всех выборок? если это так, средняя выборка будет содержать только 0,7915 записей, а не 3. Вы хотели пропорционально увеличить вероятность? в этом случае запись с весом 0,52 должна отображаться в 197% всех выборок, что невозможно.
2. Спасибо за ваш комментарий. Столбец ВЕСА должен быть стандартизирован до 1.0 для каждой страты, поэтому, чем ближе число к 1.0, тем выше вероятность включения этой строки в стратах в выборку.