获取数据框列表并按变量分组,并使用该变量作为字典的键

Posted

技术标签:

【中文标题】获取数据框列表并按变量分组,并使用该变量作为字典的键【英文标题】:Taking a list of data frames and grouping by a variable and using that variable as the key to a dictionary 【发布时间】:2019-09-05 15:13:33 【问题描述】:

我对 python 编程比较陌生。我有一个熊猫数据框列表,它们都有“年”列。我正在尝试按该列分组并转换为字典,其中字典键是变量“年份”,值是那一年的数据框列表。这在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()

任何指导将不胜感激!

【问题讨论】:

你试过了吗:grouped_dict = k: v for k, v in list_of_csv_files.groupby('Year') 我收到这个警告:AttributeError: 'list' object has no attribute 'groupby' 您可能希望在该列表上使用 pd.concat 然后在对其应用 groupby 之前构建单个数据框...可能类似于:pd.concat(list_of_csv_files).groupby('Year') .... 【参考方案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)

假设您已经有 DataFrame:

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)

【讨论】:

【参考方案2】:

首先,您应该将文件读入单个数据帧: 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重复

【讨论】:

我收到这个警告:AttributeError: 'list' object has no attribute 'groupby'

以上是关于获取数据框列表并按变量分组,并使用该变量作为字典的键的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 Excel 文件作为 pandas 数据框的映射

MySQL 查找子字符串匹配并按匹配全字分组

如何创建一个变量,该变量是给定时间范围内连续行的总和并按 id

pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用groups属性获取每个分组的样本对应的在原dataframe中的行索引位置列表

字符串变量的 MS Access 参考表

如何在 Python 中创建具有两列作为元组或 Pandas 数据框的单个变量?