使用 def 函数应用 For 循环来生成其他 DataFrame?

Applying For loop with def function to generate other DataFrame?

我有一个名为 medal 的 DataFrame。在 medal 中,有一个名为 'event_gender' 的列,它有 4 个唯一值(men、women、open 和 mixed)。 我试图编写一个函数来通过这些唯一值获取 groupby。

如果可能的话,我想为这些命名过程编写for循环。

这是我到目前为止可以做的并且正在运行。

def gender(df, sex):

    temp_df = df.loc[df['event_gender']==sex]

    last_df = temp_df.groupby(['country_3_letter_code', 'medal_type'])['event_gender'].count()

    return last_df


Men = gender(medal, 'Men')

Women = gender(medal, 'Women')

Mixed = gender(medal, 'Mixed')

Open = gender(medal, 'Open')

但是在这里的最后一个代码中,我分别为每个 DataFrame 命名,有没有更简单的方法为 Dataframes 命名这些?例如:

for item in medal['event_gender'].unique():  
    item = gender(medal, item) 

是的,你可以这样做:

for item in medal['event_gender'].unique():
   globals()[item] = gender(medal, item)

但是为什么要这样做呢?按原样维护您的数据框并使用分组对其进行处理。这种方法更容易对同一数据帧的不同组进行相同的计算,而不是对不同的数据帧进行相同的计算

如果您想处理 event_gender 列中的每个唯一项目。然后你可以像这样对你的分组项目使用聚合函数:

gender_grouping = medal.groupby(['event_gender']).agg({'country_3_letter_code': 'value_counts', 
                                                       'medal_type': 'value_counts'})

在此之后,您可以通过以下方式检索您感兴趣的 event_gender 项:

gender_grouping.loc['Men']