У меня есть датафрейм, который выглядит так:
df = pd.DataFrame({"HouseholdNumber": [1, 1, 1, 1, 1, 2, 2], "TypeOfPerson": ["Son", "Daughter", "Daughter", "Parent", "Parent", "Daughter", "Parent"], "Age": [17, 10, 20, 52, 45, 22, 50]})
print(df)
HouseholdNumber TypeOfPerson Age
0 1 Son 17
1 1 Daughter 10
2 1 Daughter 20
3 1 Parent 52
4 1 Parent 45
5 2 Daughter 22
6 2 Parent 50
и я хочу создать новую переменную, используя информацию из нескольких строк. Это проблема для меня, потому что у меня проблемы с использованием простого условия df.loc
(или np.where
). В частности, я хочу, чтобы новая переменная имела значение no
в случае, если человек не является родителем или не имеет детей в возрастных группах, a
, если у родителя есть ребенок в возрасте 18 лет или младше и b
если у родителя есть ребенок от 19 до 25 лет. Если у родителей есть ребенок обеих возрастных групп, значение все равно должно быть a
. Номер HouseholdNumber указывает разные семьи, поэтому для каждого домохозяйства должны применяться все условия. Итак, датафрейм должен выглядеть так:
HouseholdNumber TypeOfPerson Age Child
0 1 Son 17 no
1 1 Daughter 10 no
2 1 Daughter 20 no
3 1 Parent 52 a
4 1 Parent 45 a
5 2 Daughter 22 no
6 2 Parent 50 b
код, который я пытаюсь это
df["Child"]=""
for i in df["HouseholdNumber"].unique():
if (df.loc[df.TypeOfPerson.isin(["Son", "Daughter"]) & (df.Age <= 18)]):
if (df.loc[(df.TypeOfPerson == "Parent")]):
df["Child"] = "a"
elif (df.loc[df.TypeOfPerson.isin(["Son", "Daughter"]) & ((df.Age >= 19) & (df.Age <= 26))]):
df["Child"] = "b"
else:
df["Child"] = "no"
что дает мне ошибку The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
. Я не совсем уверен, куда идти отсюда, я всегда получаю эту ошибку. Даже без ошибки я подозреваю, что мой код не даст желаемого результата.