Я боролся с этим уже несколько дней.Я много читал в Интернете, нашел несколько похожих вопросов, таких как: Панды, подсчитывающие вхождение списка, содержащегося в столбце списков или Панды: подсчитать строковые критерии по нижним строкам , но ни одна из них не работает в этомcase.
У меня есть два кадра данных: df1 состоит из столбца строк.df2 состоит из столбца списков (списки представляют собой комбинацию строк из df1, каждый элемент в одном списке уникален).
Я хотел бы знать, во сколько списках df2 встречается каждая комбинация строк,Итак, сколько списков имеют «a» и «b» в качестве элементов?Сколько списков имеют «a» и «c» в качестве элементов и т. Д.
Вот так выглядит df1 (упрощенно):
df1 = pd.DataFrame({"subject": ["a", "b", "c"]})
df1
subject
0 a
1 b
3 c
Так выглядит df2 (упрощенно)).
df2 = pd.DataFrame({"subject_list": [["a", "b" ,"c"], ["b", "c"], ["a", "b"], ["b", "c"], ["c"]]})
df2
subject_list
0 ["a", "b" ,"c"]
1 ["a", "b"]
2 ["b", "c"]
3 ["c"]
4 ["b", "c"]
У меня есть два кода, которые оба работают, но не совсем правы:
Этот код ищет комбинацию двух строк в df1 (как и хотелось).Однако df1 включает в себя больше строк, чем df2, поэтому он останавливается на последней строке df2.Но есть еще несколько «строковых комбинаций» для проверки.
df1["combination_0"] = df2["subject_list"].apply(lambda x: x.count(x and df.subject[0]))
Этот код считает появление одного «списка».Однако я не могу понять, как изменить это так, чтобы он делал это для каждой комбинации значений.
df1["list_a_b"] = df2["subject_list"].apply(lambda x: x.count(df1.subject[0] and df1.subject[1]))
df1.list_a_b.sum()