熊猫多级分组依据:将分组值范围传递给功能

时间:2018-10-09 13:05:38

标签: python pandas-groupby

我有一个包含三列的数据框:“公司名称”,“产品”,“支出”。

现在我要执行以下操作:
1)按“公司名称”和“产品”进行分组,以查看每个公司和产品的花费。

grouped=df.groupby(['Company Name', 'Product'])

2)仅在分组的“公司名称”列上进行迭代,并将“支出”的值作为列表传递给函数。

我不知道第二步!

pandas文档仅说明了如何迭代两个索引,而没有说明仅对第一个索引进行迭代。
我也尝试过:

grouped.reset_index(level=2, drop=True)

但是会引发错误。

有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用此:

spent_list = df[["Company Name","Spend"]].groupby("Company Name").sum()["Spend"].values
spent_list = list(spent_list)

现在您有了spent_list,它可以存储每个公司在所有产品上的总支出。

答案 1 :(得分:0)

这将迭代SpendCompany Name分组的Product(作为列表)的值,并将列表传递给函数。

df.groupby(['Company Name', 'Product'])['Spend'].apply(lambda x: my_func(list(x)))

根据您的评论,如果要遍历Company Name并获取[50, 45]并将其传递给函数:

for name in df['Company Name'].unique():
    list_spend = df.groupby(['Company Name', 'Product']).sum()['Spend'][name].tolist()
    my_func(list_spend)