#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
Я пытаюсь выяснить, сколько раз значение каждой ячейки столбца A появляется во всех ячейках другого столбца B, используя pandas. например, для значения ячейки A1 нам нужно просмотреть ВПР его значение во всех ячейках столбца B и выяснить, во скольких ячейках столбца B оно повторяется, а затем сопоставить с ним значение count в столбце C. Я проверил все возможные решения, такие как использование contains, extract, groupby и т.д., Но никакого результата. кроме того, значение в столбце B не имеет специального текстового шаблона, который можно определить в коде.
Это то, что у меня есть в качестве фрейма данных:
A B C
============ =============================================== ========
T4561 T4561 (KHO ZAD)
E2962 E2962 (Bat - Rouchan),T5362(asw)
DT2172 T2172 (Masd),T2117 (Masd),T4561(fsd)
T6096 T6096 (Mara),H1005 (BAHH), H1049 (QIEH)
T5362 T5362 (SYMI (ABAI)),E0993,E7523(pwd)
E0993 E0993 (Tean),T4561,E0993(ssdc)
E1834 E1834 (Ahaz),T5362,E0993(sdw)
T2844 T2844 (Varmn),T3798 (QASIN), T3596 (Vara),T4561(qw)
E7523 E7523 (Sabk),E0993(bbz)
T9062 T9062 (Shrz),T5362,E7523(fgf)
И это то, что мне нужно:
A B C
============ =============================================== ========
T4561 T4561 (KHO ZAD) 4
E2962 E2962 (Bat - Rouchan),T5362(asw) 1
DT2172 T2172 (Masd),T2117 (Masd),T4561(fsd) 0
T6096 T6096 (Mara),H1005 (BAHH), H1049 (QIEH) 1
T5362 T5362 (SYMI (ABAI)),E0993,E7523(pwd) 4
E0993 E0993 (Tean),T4561,E0993(ssdc) 5
E1834 E1834 (Ahaz),T5362,E0993(sdw) 1
T2844 T2844 (Varmn),T3798 (QASIN), T3596 (Vara),T4561(qw) 1
E7523 E7523 (Sabk),E0993(bbz) 3
T9062 T9062 (Shrz),T5362,E7523(fgf) 1
Комментарии:
1. В ожидаемом результате количество для
T5362
должно быть4
, а дляDT2172
должно быть0
.2. да, спасибо. исправлено.
Ответ №1:
Используйте Series.str.extractall
вместе с шаблоном регулярных выражений, затем используйте Series.value_counts
для вычисления частоты, затем используйте Series.map
для сопоставления значений в столбце A
с соответствующими частотами:
m = df['B'].str.extractall(f"({'|'.join(df['A'])})")[0].value_counts()
df['C'] = df['A'].map(m).fillna(0)
Результат:
A B C
0 T4561 T4561 (KHO ZAD) 4.0
1 E2962 E2962 (Bat - Rouchan),T5362(asw) 1.0
2 DT2172 T2172 (Masd),T2117 (Masd),T4561(fsd) 0.0
3 T6096 T6096 (Mara),H1005 (BAHH), H1049 (QIEH) 1.0
4 T5362 T5362 (SYMI (ABAI)),E0993,E7523(pwd) 4.0
5 E0993 E0993 (Tean),T4561,E0993(ssdc) 5.0
6 E1834 E1834 (Ahaz),T5362,E0993(sdw) 1.0
7 T2844 T2844 (Varmn),T3798 (QASIN), T3596 (Vara),T4561(qw) 1.0
8 E7523 E7523 (Sabk),E0993(bbz) 3.0
9 T9062 T9062 (Shrz),T5362,E7523(fgf) 1.0