pivot_table
разрешает функцию агрегирования, поэтому, если вы добавите только столбец, содержащий 1
, к вашему фрейму данных, вы можете получить ожидаемый результат:
newdf = a.assign(val=1).pivot_table(values='val', index='Actual_Data',
columns='Final_Unique', aggfunc=sum, fill_value=0
).reset_index().rename_axis(None, axis=1)
С примерами данных, которые он дает:
Actual_Data 12,12 12,3 2,12 3,4 4,12 6,7 7,6 7,7 8,8
0 1,1,1,1,1,14, 1 0 0 0 0 0 0 0 0
1 1,1,12,2,2,4, 0 0 1 0 0 0 0 0 0
2 1,14,14,1,1,2, 0 0 0 0 1 0 0 0 0
3 14,14,14,14,14,14, 0 0 0 0 0 0 1 0 0
4 2,12,3,4,12,12, 0 0 0 0 0 0 0 1 0
5 6,6,6,6,3,14, 0 0 0 1 0 0 0 0 0
6 6,7,7,7,6,7, 0 0 0 0 0 1 0 0 0
7 6,8,8,8,8,12, 0 1 0 0 0 0 0 0 0
8 8,8,8,8,8,8, 0 0 0 0 0 0 0 0 1
Из ваших комментариев два столбца исходного a
кадра данных не связаны напрямую, а фактически представляют собой две независимые серии, и вы просто хотите узнать, сколько раз Final_Unique
значение встречается в Actual_Data
единица.
Этот код должен дать его:
newdf = a[['Actual_Data']]
for col in set(a['Final_Unique'].dropna()):
newdf[col] = newdf.Actual_Data.str.findall('(^|,)'+col+'(?=,)').apply(len)
Результат:
Actual_Data 8,8 12,3 12,12 7,7 2,12 6,7 4,12 3,4 7,6
0 8,8,8,8,8,8, 3 0 0 0 0 0 0 0 0
1 6,7,7,7,6,7, 0 0 0 1 0 2 0 0 1
2 2,12,3,4,12,12, 0 1 1 0 2 0 1 1 0
3 14,14,14,14,14,14, 0 0 0 0 0 0 0 0 0
4 1,1,12,2,2,4, 0 0 0 0 0 0 0 0 0
5 6,8,8,8,8,12, 2 0 0 0 0 0 0 0 0
6 6,6,6,6,3,14, 0 0 0 0 0 0 0 0 0
7 1,14,14,1,1,2, 0 0 0 0 0 0 0 0 0
8 1,1,1,1,1,14, 0 0 0 0 0 0 0 0 0
Обоснование приведенного выше кода: :
- вычисляет список столбцов из столбцов
Final_Unique
: set
автоматически удаляет дубликаты (но нарушает порядок), а dropna()
удаляет пустые значения - создайте новый фрейм данных из столбца
Actual_Data
. - добавьте к этому фрейму данных столбцы из списка, вычисленного на предыдущем шаге, и для каждого столбца
- используйте
str.findall
и соответствующее регулярное выражение для поиска перекрывающаяся последовательность, содержащая имя столбца после запятой или в начале строки, за которым следует запятая - последняя запятая не включена в сопоставляемую строку для правильного подсчета последовательных последовательностей, поэтому (?=...)
- применяет функцию len преобразовать этот список в простой счет