根据列

时间:2018-03-23 04:58:34

标签: python pandas function

我有一个大约600行的Pandas数据框,其中一列名为“PAGE_NAME”,其中包含8个唯一的字符串值。这是此列中的8个唯一字符串值:

my_list_of_strings = ['Demographics', 'SummaryMeasuresOfHealth', 'LeadingCausesOfDeath', 'MeasuresOfBirthAndDeath', 'RelativeHealthImportance', 'VunerablePopsAndEnvHealth', 'PreventiveServicesUse', 'RiskFactorsAndAccessToCare']

此数据框中还有其他6列。

我想要做的是创建8个新数据帧,每个数据帧对应一个,其中8个新数据帧中的每一个都只包含给定字符串在“PAGE_NAME”列中的行。

我想为8个新数据框中的每一个分配一个包含字符串的变量名称:类似Demographics_df,SummaryMeasuresOfHealth_df等......

我能够编写一个创建数据帧列表的函数(下面),但是(1)我不知道如何提取8个独立的数据帧和(2)我不知道如何给它们具有相应字符串的名称作为变量名称的一部分。

def make_pagename_dataframes(page_name_list):
    list_of_dfs = []
    for i in page_name_list:
list_of_dfs.append(original_df.loc[original_df['PAGE_NAME'] == i])
    return list_of_dfs

list_of_new_dfs = make_pagename_dataframes(my_list_of_strings)

1 个答案:

答案 0 :(得分:2)

您可以使用groupby

执行此操作
dict_of_dfs = {k: v for k, v in original_df.groupby('PAGE_NAME')}

或者他们的清单

list_of_dfs = [v for k, v in original_df.groupby('PAGE_NAME')]

获取8个数据帧。请注意,我将额外添加一些,以防万一你有超过你说的独特字符串数。但是,如果您没有至少8个唯一字符串,则会失败。

d1, d2, d3, d4, d5, d6, d7, d8, *therest = (
    v for k, v in original_df.groupby('PAGE_NAME')
)