Проверьте, находится ли мультииндекс в двух фреймах данных - PullRequest
0 голосов
/ 23 марта 2020

У меня есть два кадра данных со столбцами state и regionname, и я пытаюсь увидеть, есть ли df2 в df1, и добавить этот столбец в df3

df1=
+--------------+------------+------+
|    State     | RegionName | Data |
+--------------+------------+------+
| New York     | New York   | 123  |
| Jacksonville | Florida    | ABC  |
+--------------+------------+------+
df2=
+--------------+------------+------+
|    State     | RegionName | Data |
+--------------+------------+------+
| New York     | New York   | 456  |
+--------------+------------+------+

Output would be df3=
+--------------+------------+------+-------+
|    State     | RegionName | Data | IsIn2 |
+--------------+------------+------+-------+
| New York     | New York   | 123  |     1 |
| Jacksonville | Florida    | ABC  |     0 |
+--------------+------------+------+-------+

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Метод 1

DataFrame.stack и Series.isin

cols=['State', 'RegionName']
df1['IsIn2'] = df1[cols].stack().isin(df2[cols].stack()).all(level=0).astype(int)
print(df1)

Метод 2

Используйте DataFrame.merge с indicator, а затем замените both на 1 и другие на 0, используя Series.eq и Series.astype:

df3 = (df1.merge(df2[cols],on=cols, how='left',indicator='IsIn2')
          .assign(IsIn2=lambda x: x['IsIn2'].eq('both').astype(int)))
print(df3)

Выход

          State RegionName Data  IsIn2
0      New York   New York  123      1
1  Jacksonville    Florida  ABC      0
0 голосов
/ 23 марта 2020

Давайте сделаем

df1['IsIn2']=df1[['State','RegionName']].apply(tuple, axis=1).\
                  isin(df2[['State','RegionName']].apply(tuple, axis=1)).\
                  astype(int)
...