pandas 基于另一个dataframe的数据创建列[重复]

33qvvth1  于 2023-06-04  发布在  其他
关注(0)|答案(2)|浏览(192)

此问题已在此处有答案

How can I pivot a dataframe?(5个答案)
9天前关闭
截至9天前,社区正在审查是否重新讨论这个问题。
我正在处理一个具有以下简化结构的数据集:
| SKU|存储代码|销售|
| - -----|- -----|- -----|
| 1| A432|一百二十三|
| 2| B123|四百五十六|
| 1| C234|零九八|
到目前为止,我创建了另一个数据框,它按SKU和销售额对记录进行分组,但是还有其他字段使用其他方法进行聚合。
如何添加Sales at A、Sales at B和Sales at C列。
到目前为止,我已经尝试了使用loc来过滤数据的列的标准创建,但是我还没有成功地迭代SKU
我正在寻找的输出是:
| SKU|销售|一个|B| C类|
| - -----|- -----|- -----|- -----|- -----|
| 1|一百二十三|二百零一|十五|0|
| 2|四百五十六|四百五十六|七个|一百五十|

t98cgbkg

t98cgbkg1#

我真的不明白一些数字,如15,150,201…来自,但您可以尝试使用数据透视表

import pandas as pd
import numpy as np

dict_={'sku':[1,2,1],'store_code':['A3','B2','C1'],'sales':[123,456,98]}

df= pd.DataFrame(dict_)

df['code']=df.store_code.str[0]
df_pvt=pd.pivot_table(df,values='sales',index='sku',columns='code', aggfunc=np.sum)

u5i3ibmn

u5i3ibmn2#

首先,我建议你把数据分类。如果您只对每个SKU的每个连锁店的汇总数据感兴趣,则可以按这两列进行分组(可以使用商店名称系列的.str并通过切片获取第一个字符来计算连锁店)。分组后,您可以通过聚合(在本例中使用sum()聚合)获得一个系列。
要恢复SKU和商店链列,您可以reset_index()
最后一步是pivot()你的表。

import pandas as pd

df = pd.DataFrame({"SKU": [1,2,1], "Store code": ["A432", "B123", "C234"], "sales": [123, 456, 98]})  # or your actual df

output = (
    df.groupby(["SKU", "Store chain"])["sales"].sum()
    .reset_index()
    .pivot(index="SKU", columns="Store chain", values="sales")
    .fillna(0)
)
output["sales"] = output.sum(axis=0)

groupbypivot步骤可以使用pivot_table()方法组合在一起,如下所示:

# imports and df creation omitted

output = (
    df.pivot_table(index="SKU", columns="Store chain", values="sales", aggfunc=np.sum)
    .fillna(0)
)
output["sales"] = output.sum(axis=0)

相关问题