Я хочу вызвать функцию для всех переменных в кадре данных.Моя функция содержит атрибут « value_counts » и возвращает ошибку «Объект DataFrame не имеет атрибута value_counts».какой подход должен быть правильным?
Мой фрейм данных выглядит следующим образом:
def absolute_and_relative_freq(variable, flag):
global ax, ax1
# Dataframe of absolute and relative frequency for Var & Event
absolute_frequency = variable.value_counts()
relative_frequency = (round(variable.value_counts()/len(tppf)*100, 2))
ct = pd.crosstab(variable,flag)
event_rate = round((ct[1]/absolute_frequency)*100,2)
# Was multiplied by 100 and rounded to 2 decimal points for percentage.
df = pd.DataFrame({'Absolute Frequency':absolute_frequency, 'Relative Frequency(%)':relative_frequency,'event_count':ct[1], 'event' : event_rate})
df.sort_values('Absolute Frequency',axis = 0, ascending = False,inplace = True )
print('Absolute & Relative Frequency of',variable.name,':')
display(df)
fig_size = (12,8)
font_size = 12
title_size = 18
fig, ax1 = plt.subplots(figsize=(15, 10))
ax2 = ax1.twinx()
df['Relative Frequency(%)'].plot(title = ' %s' %variable.name,figsize = fig_size,kind='bar', color='b', ax=ax1,label = 'pct_total')
df['event'].plot(kind='line',color='r', marker='s', ax=ax2,label = 'pct_event')
ax1.legend(loc =0)
ax2.legend(loc =2)
ax1.set_ylabel('Relative Frequency(%)',fontsize =font_size)
#ax2.set_ylabel('Event Rate(%)',fontsize =font_size)
#ax1.yaxis.tick_left()
#ax2.yaxis.tick_left()
#risky =
#plt.legend()
plt.show()
[Я должен получить такую таблицу для каждой переменной и графиков.] [2]
Я попытался запустить цикл for:
list1 = ['POL_STATUS', 'INSURANCE_OBJ', 'SECTOR', 'PLAN_ID']
for l in list1 :
absolute_and_relative_freq(l, tppf.UR_FLAG_NEW)