В моем понимании векторизации данных Pandas (через саму векторизацию Pandas или через Numpy) я применяю функцию к массиву, аналогично .apply () (Пожалуйста, исправьте меня, если я ошибаюсь). Предположим, у меня есть следующий фрейм данных:
import pandas as pd
df = pd.DataFrame({'color' : ['red','blue','yellow','orange','green',
'white','black','brown','orange-red','teal',
'beige','mauve','cyan','goldenrod','auburn',
'azure','celadon','lavender','oak','chocolate'],
'group' : [1,1,1,1,1,
1,1,1,1,1,
1,2,2,2,2,
4,4,5,6,7]})
df = df.set_index('color')
df
Для этих данных я хочу применить специальный счетчик для каждого уникального значения в A. Вот моя текущая реализация:
df['C'] = 0
for value in set(df['group'].values):
filtered_df = df[df['group'] == value]
adj_counter = 0
initialize_counter = -1
spacing_counter = 20
special_counters = [0,1,-1,2,-2,3,-3,4,-4,5,-5,6,-6,7,-7]
for color,rows in filtered_df.iterrows():
if len(filtered_df.index) < 7:
initialize_counter +=1
df.loc[color,'C'] = (46+special_counters[initialize_counter])
else:
spacing_counter +=1
if spacing_counter > 5:
spacing_counter = 0
df.loc[color,'C'] = spacing_counter
df
Есть ли более быстрый способ реализовать это, не задействуя iterrows или itertuples? Поскольку подсчет в столбцах C очень нерегулярен, я не уверен, как я мог бы реализовать это с помощью применения или даже векторизации