Я бы применил следующий способ:
сначала я создаю df:
df1=pd.DataFrame({"b":[2,5,8,8], "c":[['bg10', 'ng45', 'fg56'],['cv10', 'fg56'],['bg10', 'ng45', 'fg56'],['fg56', 'fg56']]})
следующее использование применяется для подсчета количества (не уникальных) элементов в списке и сохранения это в другом столбце:
df1["count_c"]=df1.c.apply(lambda x: len(x))
вы получите следующее:
b c count_c
0 2 [bg10, ng45, fg56] 3
1 5 [cv10, fg56] 2
2 8 [bg10, ng45, fg56] 3
3 8 [fg56, fg56] 2
, чтобы получить строки, когда c больше порогового значения: `
df1[df1["count_c"]>2]["b"]
примечание: если вы хотите подсчитывать только уникальные значения в каждом списке в столбце c, вы должны использовать:
df1["count_c"]=df1.c.apply(lambda x: len(set(x)))
ИЗМЕНИТЬ
, чтобы подсчитать общее количество каждого элемента, я бы попробовал следующее: сначала давайте «распакуем все списки в столбцы
new_df1=(df1.c.apply(lambda x: pd.Series(x))).stack().reset_index(level=1,drop=True).to_frame("c").join(df1[["b"]],how="left")
, а затем получим общее количество каждого элемента. в списке и добавьте его в новый столбец:
counts_dict=new_df1.c.value_counts().to_dict()
new_df1["total_count_c"]=new_df1.c.map(counts_dict)
new_df1.head()
c b total_count_c
0 bg10 2 2
0 ng45 2 2
0 fg56 2 5
1 cv10 5 1
1 fg56 5 5