Как извлечь информацию из вложенных дубликатов в pandas? - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь извлечь информацию из дубликатов.

    data = np.array([[100,1,0, 'GB'],[100,0,1, 'IT'],[101,1,0, 'CN'],[101,0,1, 'CN'],
             [102,1,0, 'JP'],[102,0,1, 'CN'],[103,0,1, 'DE'],
             [103,0,1, 'DE'],[103,1,0, 'VN'],[103,1,0, 'VN']])
    df = pd.DataFrame(data, columns = ['wed_cert_id','spouse_1',
                               'spouse_2', 'nationality'])

enter image description here

Я бы хотел классифицировать каждую свадьбу как межнациональную или нет , В моем фактическом наборе данных может быть более 2 супругов в браке.

Моя цель - получить фрейм данных, подобный этому: enter image description here

или тому подобное это:

enter image description here

Я попытался найти способ фильтрации данных, используя .duplicated () и пытаясь отказать .duplicated () с не оператор, но не удалось его решить:

    df = df.loc[df.wed_cert_id.duplicated(keep=False) ~df.nationality.duplicated(keep=False), :]
    df = df.loc[df.wed_cert_id.duplicated(keep=False) not df.nationality.duplicated(keep=False), :]

Удаление дубликатов отбрасывает слишком много наблюдений. Мой набор данных позволяет> 2 супругам на свадьбу, создавая потенциал для дублирования:

    df.drop_duplicates(subset=['wed_cert_id','nationality'], keep=False, inplace=True)

Как мне это сделать?

Большое спасибо теперь

1 Ответ

1 голос
/ 10 января 2020

Я считаю, что вам нужно:

df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
                            .transform('nunique').gt(1).view('i1'))
print(df)

Или:

df['cross_national'] = (df.groupby('wed_cert_id')['nationality']
                       .transform('nunique').gt(1).view('i1')
                       .mul(df[['spouse_1','spouse_2']].prod(1)))
print(df)

  wed_cert_id spouse_1 spouse_2 nationality  cross_national
0         100        1        0          GB               1
1         100        0        1          IT               1
2         101        1        0          CN               0
3         101        0        1          CN               0
4         102        1        0          JP               1
5         102        0        1          CN               1
6         103        0        1          DE               1
7         103        0        1          DE               1
8         103        1        0          VN               1
9         103        1        0          VN               1
...