У меня есть датафрейм с некоторыми данными о продажах, как показано ниже:

df = pd.DataFrame({'bill_id': ['1001','1002','1006']})

У меня есть другой набор со списком bill_id:

{'1002', '10006', '1009'}

Я пытаюсь найти bill_id общего в Dataframe и наборе и пробовал следующее:

issues = list(l in set(df['bill_id']))

Я получаю сообщение об ошибке TypeError: 'bool' object is not iterable, спрашивая себя, правильно ли я его проверяю. Ожидая, что вывод будет список.

Ожидаемый результат набора, как показано ниже:

{'1002'}
0
scott martin 1 Июл 2019 в 10:38

4 ответа

Лучший ответ
df = pd.DataFrame({'bill_id': ['1001','1002','1006']})
bill_id = ('1002', '10006', '1009')
set(df.bill_id.values).intersection(bill_id)
2
mujjiga 1 Июл 2019 в 07:46

1. Преобразуйте диктант в список
2. Получить список уникальных bill_id из фрейма данных
3. Используйте набор и метод пересечения, чтобы получить общие элементы

df = pd.DataFrame({'bill_id': ['1001','1002','1006']})
bill_id = list({'1002', '10006', '1009'})

bill_df = list(df['bill_id'].unique())
final_res = list(set(bill_df).intersection(bill_id))

print(final_res)

Я надеюсь, что это решит вашу проблему

1
tawab_shakeel 1 Июл 2019 в 08:07

Вы также можете использовать isin, чтобы получить строки в вашем фрейме данных, которые соответствуют вашему другому списку идентификаторов.

In [1]: df = pd.DataFrame({'bill_id': ['1001','1002','1006']})
        other_bill_ids = set({'1002', '10006', '1009'})
        df[df['bill_id'].isin(other_bill_ids)]
Out[1]:   bill_id
        1    1002

Если все, что вам нужно, это список или набор, вы можете сделать

In [2]: df['bill_id'][df['bill_id'].isin(other_bill_ids)].tolist()
Out[2]: {'1002'}

Или

In [3]: df['bill_id'][df['bill_id'].isin(other_bill_ids)].tolist()
Out[3]: ['1002']
0
AlCorreia 1 Июл 2019 в 08:29

Попробуйте что-то подобное:

issues = set(df['bill_id']).intersection(other_bill_id_set)
1
Shir 1 Июл 2019 в 07:47