我生成了许多具有相同形状的 Dataframe ,我想将它们相互比较。我希望能够得到所有边框的平均值和中位数。
Source.0 Source.1 Source.2 Source.3
cluster
0 0.001182 0.184535 0.814230 0.000054
1 0.000001 0.160490 0.839508 0.000001
2 0.000001 0.173829 0.826114 0.000055
3 0.000432 0.180065 0.819502 0.000001
4 0.000152 0.157041 0.842694 0.000113
5 0.000183 0.174142 0.825674 0.000001
6 0.000001 0.151556 0.848405 0.000038
7 0.000771 0.177583 0.821645 0.000001
8 0.000001 0.202059 0.797939 0.000001
9 0.000025 0.189537 0.810410 0.000028
10 0.006142 0.003041 0.493912 0.496905
11 0.003739 0.002367 0.514216 0.479678
12 0.002334 0.001517 0.529041 0.467108
13 0.003458 0.000001 0.532265 0.464276
14 0.000405 0.005655 0.527576 0.466364
15 0.002557 0.003233 0.507954 0.486256
16 0.004161 0.000001 0.491271 0.504568
17 0.001364 0.001330 0.528311 0.468996
18 0.002886 0.000001 0.506392 0.490721
19 0.001823 0.002498 0.509620 0.486059
Source.0 Source.1 Source.2 Source.3
cluster
0 0.000001 0.197108 0.802495 0.000396
1 0.000001 0.157860 0.842076 0.000063
2 0.094956 0.203057 0.701662 0.000325
3 0.000001 0.181948 0.817841 0.000210
4 0.000003 0.169680 0.830316 0.000001
5 0.000362 0.177194 0.822443 0.000001
6 0.000001 0.146807 0.852924 0.000268
7 0.001087 0.178994 0.819564 0.000354
8 0.000001 0.202182 0.797333 0.000485
9 0.000348 0.181399 0.818252 0.000001
10 0.003050 0.000247 0.506777 0.489926
11 0.004420 0.000001 0.513927 0.481652
12 0.006488 0.001396 0.527197 0.464919
13 0.001510 0.000001 0.525987 0.472502
14 0.000001 0.000001 0.520737 0.479261
15 0.000001 0.001765 0.515658 0.482575
16 0.000001 0.000001 0.492550 0.507448
17 0.002855 0.000199 0.526535 0.470411
18 0.000001 0.001952 0.498303 0.499744
19 0.001232 0.000001 0.506612 0.492155
然后我想得到这两个 Dataframe 的平均值。
最简单的方法是什么?
只是为了澄清,我想得到每个特定单元格的平均值,当所有 Dataframe 的索引和列完全相同时。
所以在我给出的例子中,[0,Source.0]
的平均值是(0.001182 + 0.000001)/ 2 = 0.0005915。
7条答案
按热度按时间1hdlvixo1#
假设两个 Dataframe 有相同的列,你可以把它们连接起来,然后计算连接后的帧的汇总统计数据:
更新
如果你想计算两个数据集中具有相同索引的每组行的统计数据,你可以使用
.groupby()
按行索引对数据进行分组,然后应用平均值,中位数等:即使 Dataframe 的行数不相等,这种方法也会起作用-如果两个 Dataframe 中的一个缺少特定的行索引,则将在单个现有行上计算平均值/中位数。
yhxst69z2#
我的做法与@ali_m类似,但由于您希望每行-列组合有一个平均值,因此我得出不同的结论:
a5g8bdjr3#
根据Niklas的评论,这个问题的解决方案是
panel.mean(axis=0)
。举一个更完整的例子:
将给予以下输出:
flvtvl504#
这里有一个解决方案,首先将两个数组解栈,使它们成为多索引的系列(集群,列名)。然后你可以使用系列加法和除法,它们会自动对索引进行操作,最后解栈它们……这里是代码…
你的完成了...
或者为了更一般的目的。。
bgtovc5b5#
您可以简单地为每个帧分配一个标签,将其命名为
group
,然后命名为concat
和groupby
来执行您想要的操作:这里,每个
group
都是相同的,但这只是因为df == df2
。或者,您可以将帧放入
Panel
:gstyhher6#
在Pandas 1.3.4版本中,这对我来说很有效:
mxg2im7a7#
为了计算平均值,我发现最简单的用途:
mean_df = sum(df_list)/len(df_list)
为了使用pandas计算中位数或其他统计数据,您需要使用多索引分组,这可能是一个笨拙的解决方案。我更喜欢使用numpy,它有一个自然的机制,可以沿着一个新的轴进行堆叠和聚合,许多人都很熟悉: