我有100行10列的数据(实际数据非常大)。我还有一个row_索引列表,它包含哪些行被认为是平均值。我想计算第2、5、6、7和8列的平均值。我们可以用dataframe对象的函数来实现吗?
我知道的是做一个for循环,为row_index中的每个元素获取行的值,并保持平均值。我们有一些直接的函数,我们可以传递row_list,column_list和轴,用于exdf.meanAdvance(row_list,column_list,轴=0)
?
我已经看到了DataFrame。但我想这没什么用。
a b c d q
0 1 2 3 0 5
1 1 2 3 4 5
2 1 1 1 6 1
3 1 0 0 0 0
我想要的平均值0,2,3
行为每个a, b, d
列
a b d
0 1 1 2
通过将索引列表传递给,可以从数据帧中选择特定列。iloc
,例如:
df.iloc[:, [2,5,6,7,8]]
将返回包含这些编号列的数据帧(注意:这使用基于0的索引,因此2
指的是第三列。)
要计算该列的平均值,可以使用:
# Mean along 0 (vertical) axis: return mean for specified columns, calculated across all rows
df.iloc[:, [2,5,6,7,8]].mean(axis=0)
要在该列中取平均值,可以使用:
# Mean along 1 (horizontal) axis: return mean for each row, calculated across specified columns
df.iloc[:, [2,5,6,7,8]].mean(axis=1)
您还可以为两个轴提供特定的索引,以返回表的子集:
df.iloc[[1,2,3,4], [2,5,6,7,8]]
对于您的具体示例,您将执行以下操作:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.array([[1,2,3,0,5],[1,2,3,4,5],[1,1,1,6,1],[1,0,0,0,0]]),
columns=["a","b","c","d","q"],
index = [0,1,2,3]
)
#I want mean of 0, 2, 3 rows for each a, b, d columns
#. a b d
#0 1 1 2
df.iloc[ [0,2,3], [0,1,3] ].mean(axis=0)
哪些产出:
a 1.0
b 1.0
d 2.0
dtype: float64
或者,要通过列名访问,请首先选择以下内容:
df[ ['a','b','d'] ].iloc[ [0,1,3] ].mean(axis=0)
要回答问题的第二部分(来自评论),您可以使用pd将多个数据帧连接在一起。concat
。在列表中累积帧然后传递到pd会更快。一次完成concat
,例如。
dfs = []
for ix in idxs:
dfm = df.iloc[ [0,2,3], ix ].mean(axis=0)
dfs.append(dfm)
dfm_summary = pd.concat(dfs, axis=1) # Stack horizontally
要选择数据框的行,可以使用iloc,然后可以使用方括号选择所需的列。
例如:
df = pd.DataFrame(data=[[1,2,3]]*5, index=range(3, 8), columns = ['a','b','c'])
提供以下数据帧:
a b c
3 1 2 3
4 1 2 3
5 1 2 3
6 1 2 3
7 1 2 3
要仅选择三维和第五行,可以执行以下操作:
df.iloc[[2,4]]
它返回:
a b c
5 1 2 3
7 1 2 3
如果然后只想选择b列和c列,请使用以下命令:
df[['b', 'c']].iloc[[2,4]]
由此产生:
b c
5 2 3
7 2 3
然后,为了获得数据帧子集的平均值,可以使用df。均值函数。如果需要列的平均值,可以指定axis=0;如果需要行的平均值,可以指定axis=1
因此:
df[['b', 'c']].iloc[[2,4]].mean(axis=0)
返回:
b 2
c 3
正如我们从输入数据帧中所期望的那样。
对于您的代码,您可以执行以下操作:
df[column_list].iloc[row_index_list].mean(axis=0)
评论后编辑:评论中的新问题:我必须将这些手段存储在另一个df/矩阵中。我有L1, L2, L3, L4...LX列表告诉我列C[1,2,3]需要其均值的索引。对于ex: L1=[0,2,3],意味着我需要行0,2,3的平均值,并将其存储在新df/矩阵的第一行中。然后L2=[1,4],我将再次计算平均值,并将其存储在新的df/矩阵的第二行。同样,直到LX,我希望新的df有X行和len(C)列。L1的列...LX将保持不变。你能帮我弄一下这个吗?
答复:
如果我理解正确的话,下面的代码应该可以做到这一点(与上面的df相同,作为我使用的'a'和'b'列):
首先,您循环所有行列表,将所有的方法收集为pd。系列,然后在axis=1上连接生成的系列列表,然后进行转置以获得正确的格式。
dfs = list()
for l in L:
dfs.append(df[['a', 'b']].iloc[l].mean(axis=0))
mean_matrix = pd.concat(dfs, axis=1).T
问题内容: 从pandas数据框中选择所有行的最简单方法是什么?谁的符号在整个表中恰好出现两次?例如,在下表中,我想选择在[‘b’,’e’]中带有sym的所有行,因为这些符号的value_counts等于2。 问题答案: 我认为您可以按列和值使用: 第二个解决方案使用与布尔索引: 并用最快的解决方案和:
问题内容: Y1961 Y1962 Y1963 Y1964 Y1965 Region 0 82.567307 83.104757 83.183700 83.030338 82.831958 US 1 2.699372 2.610110 2.587919 2.696451 2.846247 US 2 14.131355 13.690028 13.599516 13.649176 13.649046
本文向大家介绍awk 根据表格数据计算列中的平均值,包括了awk 根据表格数据计算列中的平均值的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个;用作列定界符的文件。我们使用以下程序在第二列中计算值的平均值,提供的输入是学生组的成绩列表: 该程序的输出为2.125。 请记住,它NR保存了要处理的行数,END因此在块中它保存了文件中的总行数。 请记住,在许多应用程序(监视,统计)中,中位数是更
问题内容: 我正在尝试使用下面的代码来计算用户输入的一组值的平均值,并将其显示在中,但它无法正常工作。假设用户输入7、4和5,该程序在应显示5.3时显示平均值。 代码有什么问题? 问题答案: 当您拥有增强的for循环时,为什么还要对索引使用笨拙的for循环?
问题内容: 我将数据存储在pandas数据框中,如下所示: 所以,我的数据看起来像这样 我想将其转换为另一个数据框。预期的输出可以在以下python脚本中显示: 因此,我的预期输出如下所示 实际上,我可以使用以下命令来找到所有组合并对其进行计数: 但是,事实证明,此类组合在单个列中。我想将组合中的每个值分隔到不同的列中,并且还要为计数结果增加一列。有可能这样做吗?请问您有什么建议吗?先感谢您。 问
我正在编写一个java代码,它在数组中计算N个学生的平均成绩,当我输入像{3,4,3}这样的成绩时,它运行良好,但当我使用像{3.7,2.5,3.2}这样的带有小数的数字时,它开始给我带来错误,我想创建一个数据类型的类,例如学生。 任何帮助都将不胜感激。