- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些看起来像这样的长格式数据(请参阅下文重新创建):
>>> df
section subsection name topic score
0 A W zwphf a 0.802427
1 A W jcyyc a 0.404077
2 A W kucem a 0.367319
3 A X ldbxz a 0.554260
4 A X vkcqh a 0.265864
5 A X cvksn a 0.548099
6 B Y spghx a 0.472612
7 B Y cqokn a 0.577504
8 B Y wjsxg a 0.815309
9 B Z holoo a 0.459850
10 B Z lnihf a 0.667877
11 B Z wirhq a 0.138879
12 A W zwphf b 0.673711
13 A W jcyyc b 0.507962
14 A W kucem b 0.546055
15 A X ldbxz b 0.148214
16 A X vkcqh b 0.773320
17 A X cvksn b 0.791990
18 B Y spghx b 0.487480
19 B Y cqokn b 0.252534
20 B Y wjsxg b 0.237767
21 B Z holoo b 0.432981
22 B Z lnihf b 0.317932
23 B Z wirhq b 0.614401
我想在 section
+ subsection
+ name
+ topic
加上 unstack 在 topic
,但也显示断断续续的嵌套“全部”小计行:
>>> result
section subsection name a b
0 A All All 0.490341 0.573542
1 A W All 0.524608 0.575909
2 A W jcyyc 0.404077 0.507962
3 A W kucem 0.367319 0.546055
4 A W zwphf 0.802427 0.673711
5 A X All 0.456074 0.571174
6 A X cvksn 0.548099 0.791990
7 A X ldbxz 0.554260 0.148214
8 A X vkcqh 0.265864 0.773320
9 B All All 0.522005 0.390516
10 B Y All 0.621808 0.325927
11 B Y cqokn 0.577504 0.252534
12 B Y spghx 0.472612 0.487480
13 B Y wjsxg 0.815309 0.237767
14 B Z All 0.422202 0.455104
15 B Z holoo 0.459850 0.432981
16 B Z lnihf 0.667877 0.317932
17 B Z wirhq 0.138879 0.614401
通过突出显示新行,这可能更容易可视化:
最初的 groupby 本身,没有小计,看起来像:
>>> df.groupby(['section', 'subsection', 'name', 'topic'])['score'].mean().unstack('topic')
topic a b
section subsection name
A W jcyyc 0.404077 0.507962
kucem 0.367319 0.546055
zwphf 0.802427 0.673711
X cvksn 0.548099 0.791990
ldbxz 0.554260 0.148214
vkcqh 0.265864 0.773320
B Y cqokn 0.577504 0.252534
spghx 0.472612 0.487480
wjsxg 0.815309 0.237767
Z holoo 0.459850 0.432981
lnihf 0.667877 0.317932
wirhq 0.138879 0.614401
但我不确定如何使用 margins
为 ['section', 'topic']
和 [' 上的 groupby 操作获取小计节”、“小节”、“主题”]
。
重新创建 df
:
import pandas as pd
data = [['A', 'W', 'zwphf', 'a', 0.80242702],
['A', 'W', 'jcyyc', 'a', 0.40407741],
['A', 'W', 'kucem', 'a', 0.36731944],
['A', 'X', 'ldbxz', 'a', 0.55426007],
['A', 'X', 'vkcqh', 'a', 0.26586396],
['A', 'X', 'cvksn', 'a', 0.54809939],
['B', 'Y', 'spghx', 'a', 0.47261223],
['B', 'Y', 'cqokn', 'a', 0.57750357],
['B', 'Y', 'wjsxg', 'a', 0.81530899],
['B', 'Z', 'holoo', 'a', 0.45985020],
['B', 'Z', 'lnihf', 'a', 0.66787651],
['B', 'Z', 'wirhq', 'a', 0.13887864],
['A', 'W', 'zwphf', 'b', 0.67371101],
['A', 'W', 'jcyyc', 'b', 0.50796174],
['A', 'W', 'kucem', 'b', 0.54605544],
['A', 'X', 'ldbxz', 'b', 0.14821402],
['A', 'X', 'vkcqh', 'b', 0.77331968],
['A', 'X', 'cvksn', 'b', 0.79198960],
['B', 'Y', 'spghx', 'b', 0.48747995],
['B', 'Y', 'cqokn', 'b', 0.25253355],
['B', 'Y', 'wjsxg', 'b', 0.23776694],
['B', 'Z', 'holoo', 'b', 0.43298050],
['B', 'Z', 'lnihf', 'b', 0.31793156],
['B', 'Z', 'wirhq', 'b', 0.61440056]]
df = pd.DataFrame(data,
columns=['section', 'subsection', 'name', 'topic', 'score'])
重新创建预期结果:
import numpy as np
result = np.array([['A', 'All', 'All', 0.490341219, 0.573541919],
['A', 'W', 'All', 0.52460796, 0.5759094],
['A', 'W', 'jcyyc', 0.404077415, 0.5079617479999999],
['A', 'W', 'kucem', 0.36731944, 0.546055442],
['A', 'W', 'zwphf', 0.8024270240000001, 0.673711011],
['A', 'X', 'All', 0.45607447700000003, 0.571174437],
['A', 'X', 'cvksn', 0.548099391, 0.791989603],
['A', 'X', 'ldbxz', 0.554260074, 0.148214029],
['A', 'X', 'vkcqh', 0.265863967, 0.77331968],
['B', 'All', 'All', 0.5220050279999999, 0.390515513],
['B', 'Y', 'All', 0.621808268, 0.325926816],
['B', 'Y', 'cqokn', 0.577503576, 0.252533557],
['B', 'Y', 'spghx', 0.472612233, 0.487479951],
['B', 'Y', 'wjsxg', 0.815308995, 0.237766941],
['B', 'Z', 'All', 0.42220178799999997, 0.455104209],
['B', 'Z', 'holoo', 0.459850205, 0.43298050200000004],
['B', 'Z', 'lnihf', 0.667876511, 0.317931565],
['B', 'Z', 'wirhq', 0.13887864800000002, 0.61440056]], dtype=object)
result = pd.DataFrame(result, columns=['section', 'subsection', 'name', 'a', 'b'])
最佳答案
你需要:
s = df.groupby(['section', 'subsection', 'name', 'topic'])['score'].mean().unstack('topic')
s1 = (s.mean(level=0)
.assign(subsection = 'All', name='All')
.set_index(['subsection','name'], append=True))
s2 = (s.mean(level=[0, 1])
.assign(name='All')
.set_index(['name'], append=True))
s = pd.concat([s, s1, s2]).sort_index()
但是如果需要 submeans
不确定上面的解决方案是否正确(平均均值),更好的是:
s1 = df.groupby(['section','topic'])['score'].mean().unstack('topic').assign(subsection = 'All', name='All').set_index(['subsection','name'], append=True)
s2 = df.groupby(['section','subsection','topic'])['score'].mean().unstack('topic').assign(name='All').set_index(['name'], append=True)
s = pd.concat([s, s1, s2]).sort_index()
print (s)
topic a b
section subsection name
A All All 0.490341 0.573542
W All 0.524608 0.575909
jcyyc 0.404077 0.507962
kucem 0.367319 0.546055
zwphf 0.802427 0.673711
X All 0.456074 0.571174
cvksn 0.548099 0.791990
ldbxz 0.554260 0.148214
vkcqh 0.265864 0.773320
B All All 0.522005 0.390516
Y All 0.621808 0.325927
cqokn 0.577504 0.252534
spghx 0.472612 0.487480
wjsxg 0.815309 0.237767
Z All 0.422202 0.455104
holoo 0.459850 0.432980
lnihf 0.667877 0.317932
wirhq 0.138879 0.614401
编辑:
如果需要排序 - 这里 tot
instaed All
可以使用 ordered categoricals
:
cat1 = ['tot'] + df['subsection'].unique().tolist()
cat2 = ['tot'] + df['name'].unique().tolist()
df['subsection'] = pd.Categorical(df['subsection'], categories=cat1, ordered=True)
df['name'] = pd.Categorical(df['name'], categories=cat2, ordered=True)
s = df.groupby(['section', 'subsection', 'name', 'topic'])['score'].mean().unstack('topic')
s1 = (df.groupby(['section','topic'])['score'].mean()
.unstack('topic').assign(subsection = 'tot', name='tot')
.set_index(['subsection','name'], append=True))
s2 = (df.groupby(['section','subsection','topic'])['score'].mean()
.unstack('topic')
.assign(name='tot')
.set_index(['name'], append=True))
s = pd.concat([s, s1, s2]).sort_index()
print (s)
topic a b
section subsection name
A tot tot 0.490341 0.573542
W tot 0.524608 0.575909
zwphf 0.802427 0.673711
jcyyc 0.404077 0.507962
kucem 0.367319 0.546055
X tot 0.456074 0.571174
ldbxz 0.554260 0.148214
vkcqh 0.265864 0.773320
cvksn 0.548099 0.791990
B tot tot 0.522005 0.390516
Y tot 0.621808 0.325927
spghx 0.472612 0.487480
cqokn 0.577504 0.252534
wjsxg 0.815309 0.237767
Z tot 0.422202 0.455104
holoo 0.459850 0.432980
lnihf 0.667877 0.317932
wirhq 0.138879 0.614401
关于python - 带有 Pandas pivot_table 的嵌套小计 'All' 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440716/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!