我尝试更多地了解python中的apply方法,并问自己如何使用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 件事,但没有任何效果......我希望有人可以在这里帮助我?!