У меня есть фрейм данных, как показано ниже.Которые являются данными людей, которые остаются в области.
ID Nationality Age
1 India 38
2 China 45
3 USA 78
4 China 12
5 Pakistan 48
6 India 10
7 India 71
8 India 16
9 China 36
10 China 31
11 USA 82
12 Pakistan 3
13 Pakistan 36
14 India 26
15 USA 52
16 China 26
17 China 5
18 USA 4
19 Pakistan 24
20 Pakistan 85
В приведенном выше кадре данных я хотел бы добавить еще один столбец как 'Owner_ID'.
Условия:
1. Pick random 20% ID whose Nationality == India or Pakistan whose age is
20 < age 70 and age Tag them as No_Owner (Here ID=14 Nationality = India and Age 26 tagged as No_Owner, similarly ID = 19).
2. Owner_ID should be one of the ID (1-20) and their Nationality should match each other
3. The Age of the Owner_ID should be in between 30 to 50 for country other than USA.
4. If the Nationality is USA, age can be 25 to 85
5. Percentage of Owner_ID from USA should be more than 20%
Ожидаемый результат:
ID Nationality Age Owner_ID
1 India 38 1
2 China 45 2
3 USA 78 15
4 China 12 9
5 Pakistan 48 5
6 India 10 1
7 India 71 1
8 India 16 1
9 China 36 2
10 China 31 2
11 USA 82 11
12 Pakistan 31 5
13 Pakistan 36 5
14 India 26 No_Owner
15 USA 52 15
16 China 26 9
17 China 5 9
18 USA 4 15
19 Pakistan 24 No_Owner
20 Pakistan 85 5
Сначала я попробовал следующий код, сгенерировал Owner_ID и национальность.
pid=data.query('age > 25 and age < 75').ID.values
pid_=[]
for i in eid:
if i in pid:
pid_.append(i)
else:
pid_.append(random.choice(pid))
data['Owner_ID']=pid_
Затем случайным образом сгенерировал национальность
Nationality=['USA', 'India' , 'China', 'Pakistan']
pob_nat=[0.25, 0.25, 0.25, 0.25]
nat={}
for i in pid:
nat[i]=random.choices(Nationality,weights=pob_nat)[0]
data['nationality']=data['PID'].map(lambda x:nat[x])
Приведенный выше код не удовлетворяет всем вышеперечисленным условиям.