【问题标题】:Pandas split one dataframe into multiple dataframesPandas 将一个数据帧拆分为多个数据帧
【发布时间】:2019-05-31 11:36:54
【问题描述】:

我有一个 pandas 数据框,我需要将其拆分为多个数据框。我需要拆分的数据帧的数量取决于我拥有多少个月的数据,即我需要为每个月创建一个新的数据帧。 所以df:

MONTH   NAME INCOME
201801   A     100$
201801   B      20$
201802   A      30$

所以我需要创建 2 个数据框。问题是我不知道我会提前多少个月的数据。 我该怎么做

【问题讨论】:

    标签: pandas


    【解决方案1】:

    您可以使用 groupby 创建数据框字典,

    df['MONTH'] = pd.to_datetime(df['MONTH'], format = '%Y%m')
    dfs = dict(tuple(df.groupby(df['MONTH'].dt.month)))
    dfs[1]
    
    
        MONTH   NAME    INCOME
    0   2018-01-01  A   100$
    1   2018-01-01  B   20$
    

    如果您的数据跨越多年,则需要在分组中包含年份

    dfs = dict(tuple(df.groupby([df['MONTH'].dt.year,df['MONTH'].dt.month])))
    dfs[(2018, 1)]
    
        MONTH      NAME INCOME
    0   2018-01-01  A   100$
    1   2018-01-01  B   20$
    

    【讨论】:

    • 我喜欢你的 dict(tuple(groupby...)。+1 我正在将它添加到我的工具箱中。
    • 谢谢。尽管指定了格式 = '%Y%m',为什么 MONTH 从 201801 变为 2018-01-01?
    • @Victor,Pandas 以 Ymd 格式创建日期,如果缺少日期组件,它将添加 01 作为日期。
    【解决方案2】:

    您可以使用groupby 将数据帧拆分为数据帧列表或数据帧字典:

    数据框字典:

    dict_of_dfs = {}
    for n, g in df.groupby(df['MONTH']):
        dict_of_dfs[n] = g
    

    数据框列表:

    list_of_dfs = []
    for _, g in df.groupby(df['MONTH']):
        list_of_dfs.append(g)
    

    或者正如@BenMares 建议的那样使用理解:

    dict_of_dfs = {
    
        month: group_df 
    
        for month, group_df in df.groupby('MONTH') 
    
    }
    
    
    list_of_dfs = [
    
        group_df 
    
        for _, group_df in df.groupby('MONTH')
    
    ]
    

    【讨论】:

    • 使用推导式会更优雅! {index: group_df for index, group_df in df.groupby('MONTH')}
    • 同意字典理解。很好,@BenMares。
    【解决方案3】:

    你也可以这样使用局部变量字典vars():

    for m in df['MONTH'].unique():
        temp = 'df_{}'.format(m)    
        vars()[temp] = df[df['MONTH']==m]
    

    每个 DataFrame 都以 df_month 的名称创建。例如:

    df_201801

        MONTH   NAME    INCOME
    0   201801  A   100$
    1   201801  B   20$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 2018-05-05
      • 2013-11-16
      相关资源
      最近更新 更多