获取数据帧列表并按变量分组,然后将该变量用作字典的键

时间:2019-04-15 15:28:57

标签: python list dictionary for-loop

我是python编程的新手。我有一个熊猫数据框的列表,所有的数据框都具有“年份”列。我正在尝试按该列分组并转换为字典,其中字典键是变量“ Year”,而值是该年的数据帧列表。在python中有可能吗?

我尝试过:

grouped_dict = list_of_csv_files.groupby(by = 'Year').to_dict()

我相信我将不得不遍历每个数据帧吗?我没有提供任何数据,因为我希望它是一个简单的解决方案。

我也尝试过:

grouped_dict = list_of_csv_files.groupby(by = 'Year').apply(lambda dfg: dfg.to_dict(orient='list')).to_dict()

任何指导将不胜感激!

2 个答案:

答案 0 :(得分:1)

首先,您应该将文件读入单个数据帧: list_of_dfs = [pd.read_csv(filename, index_col=False) for filename in list_of_csv_files] df = pd.concat(list_of_dfs, sort=True)

然后在数据帧上应用groupby转换并将其转换为字典: grouped_dict = df.groupby('Year').apply(list).to_dict()

此问题是GroupBy results to dictionary of lists

的重复项

答案 1 :(得分:1)

到目前为止,其他答案都未达到要求,因此我给您一个替代方法。假设您有CSV文件(因为您的变量是以这种方式命名的):

from collections import defaultdict

yearly_dfs = defaultdict(list)
for csv in list_of_csv_files:
    df = pd.read_csv(csv)
    for yr, yr_df in df.groupby("Year"):
        yearly_dfs[yr].append(yr_df)

假设您已经有DataFrames:

from collections import defaultdict

yearly_dfs = defaultdict(list)
for df in list_of_csv_files:
    for yr, yr_df in df.groupby("Year"):
        yearly_dfs[yr].append(yr_df)