我遇到了一个nice solution to insert subtotals到大 Pandas 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%
非常感谢!
参考方案
使用带有lambda函数的GroupBy.apply
的第一级使用 MultiIndex
:
f = lambda x: (x / x.iloc[0]).mul(100).round(2).astype(int).astype(str)+"%"
df = pvt.groupby(level=0).apply(f)
print (df)
Units_Sold
Category Product
Group A 100%
Product 1 49%
Product 2 50%
Group B 100%
Product 1 52%
Product 2 47%
或者将 GroupBy.transform
与 GroupBy.first
一起使用:
df = (pvt.div(pvt.groupby(level=0).transform('first'))
.mul(100)
.round(2)
.astype(int)
.astype(str)+"%")
print (df)
Units_Sold
Category Product
Group A 100%
Product 1 43%
Product 2 56%
Group B 100%
Product 1 58%
Product 2 41%
Python uuid4,如何限制唯一字符的长度 - python在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…
Python 3会流行吗? - python我已经学习了一些Python 2和Python 3,似乎Python 2总体上比Python 3更好。这就是我的问题所在。是否有充分的理由真正切换到python 3? 参考方案 总体上,甚至在大多数细节上,Python3都比Python2更好。关于第三方库, Python 3落后于的唯一区域是。使Python变得如此出色的原因不仅在于它作为一种语言的内在特性…
Python-如何检查Redis服务器是否可用 - python我正在开发用于访问Redis Server的Python服务(类)。我想知道如何检查Redis Server是否正在运行。而且如果某种原因我无法连接到它。这是我的代码的一部分import redis rs = redis.Redis("localhost") print rs 它打印以下内容<redis.client.Redis o…
Python-crontab模块 - python我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…
Python:检查是否存在维基百科文章 - python我试图弄清楚如何检查Wikipedia文章是否存在。例如,https://en.wikipedia.org/wiki/Food 存在,但是https://en.wikipedia.org/wiki/Fod 不会,页面只是说:“维基百科没有此名称的文章。”谢谢! 参考方案 >>> import urllib >>> prin…