如何通过对多个变量进行分组来创建新的 pandas 数据框?
Posted
技术标签:
【中文标题】如何通过对多个变量进行分组来创建新的 pandas 数据框?【英文标题】:How do I create new pandas dataframe by grouping multiple variables? 【发布时间】:2022-01-07 16:30:39 【问题描述】:我很难对数据进行排序。在我试图弄清楚这一点的时间里,我可以手动创建一个新的 .csv 文件,但我需要通过代码来做到这一点。我有一个 150 年前球员棒球薪水的大型数据集。 This is what my dataset looks like.
我想创建一个新的数据框,用于添加给定球队在给定年份的个人球员工资,按球队和年份组织。使用以下技术,我想出了这个:team_salaries_groupby_team = salaries.groupby(['teamID','yearID']).agg('salary' : ['sum'])
,它输出这个:my output。在屏幕上它看起来有点像我想要的,但我想要一个包含三列的数据框(加上左侧的索引)。我真的不能对这个输出做我想做的那种分析。
最后,我也试过这个方法:new_column = salaries['teamID'] + salaries['yearID'].astype(str) salaries['teamyear'] = new_column salaries teamyear = salaries.groupby(['teamyear']).agg('salary' : ['sum']) print(teamyear)
。 Another output 它添加了给定年份每支球队的个人球员工资,但现在我不知道如何将年份分开并将其放入自己的列中。请帮忙?
【问题讨论】:
【参考方案1】:你只需要reset_index()
这里是示例代码:
salaries = pd.DataFrame(columns=['yearID','teamID','igID','playerID','salary'])
salaries=salaries.append('yearID':1985,'teamID':'ATL','igID':'NL','playerID':'A','salary':10000,ignore_index=True)
salaries=salaries.append('yearID':1985,'teamID':'ATL','igID':'NL','playerID':'B','salary':20000,ignore_index=True)
salaries=salaries.append('yearID':1985,'teamID':'ATL','igID':'NL','playerID':'A','salary':10000,ignore_index=True)
salaries=salaries.append('yearID':1985,'teamID':'ATL','igID':'NL','playerID':'C','salary':5000,ignore_index=True)
salaries=salaries.append('yearID':1985,'teamID':'ATL','igID':'NL','playerID':'B','salary':20000,ignore_index=True)
salaries=salaries.append('yearID':2016,'teamID':'ATL','igID':'NL','playerID':'A','salary':100000,ignore_index=True)
salaries=salaries.append('yearID':2016,'teamID':'ATL','igID':'NL','playerID':'B','salary':200000,ignore_index=True)
salaries=salaries.append('yearID':2016,'teamID':'ATL','igID':'NL','playerID':'C','salary':50000,ignore_index=True)
salaries=salaries.append('yearID':2016,'teamID':'ATL','igID':'NL','playerID':'A','salary':100000,ignore_index=True)
salaries=salaries.append('yearID':2016,'teamID':'ATL','igID':'NL','playerID':'B','salary':200000,ignore_index=True)
之后,groupby
和 reset_index
sample_df = salaries.groupby(['teamID', 'yearID']).salary.sum().reset_index()
这就是你要找的吗?
【讨论】:
是的,我正在寻找一个类似的数据框,但要包含球队的总薪水,从该球队的每个球员那里添加。看起来你是手动制作的,一行一行。我有几千行数据可以使用。有什么想法可以运行一行代码来同时拉取选定列的每一行吗?我一直在搞乱.loc
试图做到这一点。 salaries = salaries.append('yearID':salaries.loc[0], 'teamID':salaries.loc[2], 'salary':salaries.loc[4], ignore_index = True)
不过这会引发错误。
@redleg_64 :请忽略 append
部分,它只是用于创建一个虚拟数据框。 sample_df = salaries.groupby(['teamID', 'yearID']).salary.sum().reset_index()
--> 这部分是我相信你正在寻找的。如果我错了,请纠正我
@redleg_64:我假设你已经有了数据框。如果没有,那么您可能需要使用 pandas 的 join
或 merge
。
非常感谢@DukeLover 帮助我解决这个问题。知道你想对你的数据做什么,但不能通过代码来做,这可能会令人沮丧。 #imarookie以上是关于如何通过对多个变量进行分组来创建新的 pandas 数据框?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用size函数计算每个分组的样本的个数
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用get_group函数获取指定组合多分组变量对应的样本(使用元组指定多个分组变量)
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用mean函数计算所有分组下数据变量的聚合平均值
pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组使用sum函数计算所有分组下数据变量的聚合加和值