获取数据框列表并按变量分组,并使用该变量作为字典的键
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 数据框的映射
如何创建一个变量,该变量是给定时间范围内连续行的总和并按 id
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用groups属性获取每个分组的样本对应的在原dataframe中的行索引位置列表