Распределение по признакам. Ошибка - ValueError: Grouper and axis must be same length
У меня есть три таблицы. Я их объединяю в одну после высчитываю перцентили и строю гистограмму распределения времени. После нужно сделать распределение по признакам, но выскакивает ошибка: ValueError: Grouper and axis must be same length.
all_table = pd.merge(regist.append(new_events), purch, on = ('user_id'), how = 'right')
all_table.head()
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
np.percentile(all_table['order_sum'], 100)
np.percentile(all_table['order_sum'], 95)
np.percentile(all_table['order_sum'], 85)
perc_85 = np.percentile(all_table['order_sum'], 85)
plt.figure(figsize=(10, 5)) # размерность
plt.hist(all_table['order_sum'], bins=50, color='r')
plt.vlines(perc_85, ymin = 0, ymax = 0.7, linestyles = 'dashed', label = f'85-ый перцентиль – {perc_85} дней')
plt.title('Распределение времени между первым заходом на сайт и покупкой') #Заголовок
plt.xlabel('Время') #Название оси X
plt.ylabel('Покупки') #Название оси Y
plt.grid() # сетка
plt.axvline(perc_85, color='k', linestyle='--')
plt.legend()
plt.show()
def plot_segment_distribution(all_table, geo, device):
for segment in geo:
aggregated_geo = all_table.groupby(by = [device, geo])['user_id'].count().reset_index()
sns.catplot(x = geo,
y = 'user_id',
hue = device, # сообщаем, что хотим, чтобы разные группы имели разный цвет
data = aggregated_geo,
kind = "bar",
height = 4, # задаем размер графика
aspect = 1.5) # задаем ширину столбца\
plot_segment_distribution(all_table, #датафрейм
["geo", "device"], #сегменты
"test_group") #тест-фактор
Ответы (1 шт):
Что-то тут не так:
for segment in geo:
^^^
aggregated_geo = all_table.groupby(by = [device, geo])['user_id'].count().reset_index()
^^^
sns.catplot(x = geo,
^^^
...
Вы вот эту переменную цикла segment нигде потом не используете, зато используете geo, по которой итерируетесь. Я подозреваю, что везде внутри цикла вместо geo должна быть переменная segment.
И вообще постарайтесь разобраться с именами переменных. Очень плохо, когда вы вызываете функцию с какими-то именами, а в параметрах самой функции есть те же имена переменных - но уже на других местах. Это очень запутывает. У вас при вызове функции получается фактически так:
geo = ["geo", "device"]
device = "test_group"
Вы сами не путаетесь с таким именованием переменных где у вас что?


