Cha*_*tra 5 python pivot-table pandas
我是python的新手。我有以下数据框。我能够在 Excel 中旋转。
我想添加差异列(在图像中,我手动添加了它)。
不同的是BA值。我能够使用 Python 数据透视表复制差异列和总计。下面是我的代码。
table = pd.pivot_table(data, index=['Category'], values = ['value'], columns=['Name','Date'], fill_value=0)
Run Code Online (Sandbox Code Playgroud)
如何添加差异列并计算值?
我怎样才能在底部获得总计?
数据如下
df = pd.DataFrame({
"Value": [0.1, 0.2, 3, 1, -.5, 4],
"Date": ["2020-07-01", "2020-07-01", "2020-07-01", "2020-07-01", "2020-07-01", "2020-07-01"],
"Name": ['A', 'A', 'A', 'B', 'B', 'B'],
"HI Display1": ["X", "Y", "Z", "Z", "Y", "X"]})
Run Code Online (Sandbox Code Playgroud)
我想要数据透视表如下
这是一种方法:
df = pd.DataFrame({
"Name": ["A", "A", "A", "B", "B", "B"],
"Date": "2020-07-01",
"Value": [0.1, 0.2, 3, 2, -.5, 4],
"Category": ["Z", "Y", "X", "Z", "Y", "X"]
})
piv = pd.pivot_table(df, index="Category", columns="Name", aggfunc=sum)
piv.columns = [c[1] for c in piv.columns]
piv["diff"] = piv.B - piv.A
Run Code Online (Sandbox Code Playgroud)
输出 ( piv) 是:
A B diff
Category
X 3.0 4.0 1.0
Y 0.2 -0.5 -0.7
Z 0.1 2.0 1.9
Run Code Online (Sandbox Code Playgroud)
要为 A 和 B 添加“总计”,请执行
piv.loc["total"] = piv.sum()
Run Code Online (Sandbox Code Playgroud)
从“差异”列中删除总计:
piv.loc["total", "diff"] = "" # or np.NaN, if you'd like to be more
# 'pandas' style.
Run Code Online (Sandbox Code Playgroud)
现在的输出是:
A B diff
Category
X 3.0 4.0 1.0
Y 0.2 -0.5 -0.7
Z 0.1 2.0 1.9
total 3.3 5.5
Run Code Online (Sandbox Code Playgroud)
如果此时您想在类别顶部添加标题“名称”,请执行以下操作:
piv.columns = pd.MultiIndex.from_product([["Name"], piv.columns])
Run Code Online (Sandbox Code Playgroud)
piv 就是现在:
Name
A B diff
Category
X 3.0 4.0 1.0
Y 0.2 -0.5 -0.7
Z 0.1 2.0 1.9
total 3.3 5.5
Run Code Online (Sandbox Code Playgroud)
要将日期添加到每一列:
date = df.Date.max()
piv.columns = pd.MultiIndex.from_tuples([c+(date,) for c in piv.columns])
==>
Name
A B diff
2020-07-01 2020-07-01 2020-07-01
Category
X 3.0 4.0 1
Y 0.2 -0.5 -0.7
Z 0.1 2.0 1.9
total 3.3 5.5
Run Code Online (Sandbox Code Playgroud)
最后,要为列着色(例如,如果您使用的是 Jupyter),请执行以下操作:
second_col = piv.columns[2]
piv.style.background_gradient("PiYG", subset = [second_col]).highlight_null('white').set_na_rep("")
Run Code Online (Sandbox Code Playgroud)