我有一个包含三列的数据框:“公司名称”,“产品”,“支出”。
现在我要执行以下操作:
1)按“公司名称”和“产品”进行分组,以查看每个公司和产品的花费。
grouped=df.groupby(['Company Name', 'Product'])
2)仅在分组的“公司名称”列上进行迭代,并将“支出”的值作为列表传递给函数。
我不知道第二步!
pandas文档仅说明了如何迭代两个索引,而没有说明仅对第一个索引进行迭代。
我也尝试过:
grouped.reset_index(level=2, drop=True)
但是会引发错误。
有什么想法吗?
谢谢。
答案 0 :(得分:0)
您可以使用此:
spent_list = df[["Company Name","Spend"]].groupby("Company Name").sum()["Spend"].values
spent_list = list(spent_list)
现在您有了spent_list
,它可以存储每个公司在所有产品上的总支出。
答案 1 :(得分:0)
这将迭代Spend
和Company 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)