【发布时间】:2021-09-09 11:34:02
【问题描述】:
版本:Python 3.7.6、pandas 1.0.0
输入数据帧
df = pd.DataFrame(dict(
recruit_dt=["1/1/2017"]*3+["1/1/2018"]*3+["1/1/2019"]*3,
label = [1,3,4]*3,
nmem = np.random.choice(list(range(10000,3000000)),9),
pct_fem = np.random.sample(9),
mean_age = 50 + 10*np.random.sample(9),
sd_age = 8 + 2*np.random.sample(9)
))
希望在以下转换后呈现此内容
dfp = pd.pivot_table(df, values=["nmem","pct_fem","mean_age","sd_age"], index="recruit_dt", columns="label")
dfp = dfp.reindex(columns=['nmem', 'pct_fem', 'mean_age', 'sd_age'], level=0)
如何编写样式器以使所有nmem 列都有千位分隔符{:,},'pct_fem' 是两位小数的百分比,mean_age 和sd_age 是带有两位小数的浮点数?有没有使用styler.format 或styler.apply 和IndexSlice 的方法?
== 编辑:这似乎有效。有没有更简洁的解决方案?
dfp.columns.names = ["metrics","label"]
dfp.style.format("{:,}", subset=pd.IndexSlice[:,'nmem']) \
.format("{:.2%}", subset=pd.IndexSlice[:,'pct_fem']) \
.format("{:.2f}", subset=pd.IndexSlice[:,['mean_age','sd_age']])
【问题讨论】:
-
您的编辑是正确的。据我所知,使用
pd.IndexSlice似乎是最好的解决方案。请将其发布为答案。 -
对我来说,无论是在 Android 上使用 Pandas 1.0.1 还是在 Windows 10 上使用 Pandas 1.2.3,这段代码都不会改变原始格式!
标签: python pandas pandas-styles