Я пытаюсь узнать больше о методе apply в python и спрашиваю себя, как написать следующий код, используя apply:
У меня есть датафрейм df, подобный следующему:
A B C D E points
0 0 0 0 1 43 94
1 0 0 1 1 55 62
2 1 1 0 1 21 84
3 1 0 1 0 13 20
Кроме того, у меня есть функция, подобная следующей, которая выполняет свою работу:
def f1(df):
df_means = pd.DataFrame(columns = ['Mean_Points'])
for columnname in df.columns:
if len(df[df[columnname] == 1]) > 1:
df_means.loc[columnname] = [df[df[columnname] == 1]['points'].mean()]
return df_means
Так что вывод f1 равен
'Mean_Points'
A 52
C 41
D 80
, и это совершенно нормально.Но мне интересно, есть ли возможность (я уверен, что есть) получить тот же результат с помощью метода apply.Я пробовал:
df_means = pd.DataFrame(columns = ['Mean_Points'])
cols = [col for col in df.columns if len(df[df[col] == 1]) > 1]
df_means.loc[cols] = df[cols].apply(lambda x: df[df[x] == 1]['points'].mean(), axis = 1)
или подобное:
df_means = pd.DataFrame(columns = ['Mean_Points'])
df.columns.apply(lambda x: df_means.loc[x] = [df[df[x] == 1]['points'].mean()] if len(df[df[x] == 1]) > 1 else None)
и еще 2,3, но ничего не помогло ... Надеюсь, кто-нибудь может мне здесь помочь?!