我发现了一个很好的解决方案,可以将小计插入到 Pandas groupby 数据框中。但是,现在我想修改结果以显示相对于小计的值,而不是绝对值。
以下是用于显示 groupby 的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Category": np.random.choice(["Group A", "Group B"], 50),
"Product": np.random.choice(["Product 1", "Product 2"], 50),
"Units_Sold": np.random.randint(1, 100, size=(50)),
"Date": np.random.choice(
pd.date_range("1/1/2011", "03/31/2011", freq="D"), 50, replace=False
),
}
)
iList = ["Category", "Product"]
pvt = pd.concat(
[df.assign(**{x: "" for x in iList[i:]}).groupby(iList).sum() for i in range(1, 3)]
).sort_index()
print(pvt)
导致了
Units_Sold
Category Product
Group A 1170
Product 1 434
Product 2 736
Group B 980
Product 1 437
Product 2 543
我尝试了类似的事情。
pvt.transform(lambda x: (round(x / x['Group A', ''],2)*100).astype(int).astype(str)+"%")
但显然这只计算相对于第一行的值。
我需要的是:
Units_Sold
Category Product
Group A 100%
Product 1 37%
Product 2 63%
Group B 100%
Product 1 45%
Product 2 55%
非常感谢!