python - 迭代地平均特定列表元素?
问题描述
假设我有一个带有变量 lines 的数据集,如下所示:
lines = ['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', '1', '10', '38', '0.0', '9', '20050407', '20170319', '0', '0', '0', '0', '1', '1', '281.6']
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', '1', '10', '38', '0.0', '9', '20050407', '20170319', '0', '0', '0', '0', '1', '1', '281.6']
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', '1', '10', '38', '0.0', '9', '20050407', '20170319', '0', '0', '0', '0', '1', '1', '281.6']
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', '1', '10', '38', '0.0', '9', '20050407', '20170319', '0', '0', '0', '0', '1', '1', '281.6']
当且仅当,我如何lines[0] == lines[0]
表示仅当列表的第一个元素完全相同时,在列表的其余部分中平均特定值,并将其组合成一个平均列表?当然,我必须将所有数字转换为浮点数。
在具体示例中,我想要一个单数列表,其中除 lines[1] 和 lines[-1] 之外的所有数值都被平均。有什么简单的方法吗?
预期产出
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', 1, avg_of_var, avg_of_var, avg, , '20050407', '20170319', '0', '0', '0', '0', '1', '1', '281.6']
基本上 - 我现在看到我的示例数据很不幸,因为所有值都是相同的 - 但我想要一个包含示例中四行数值平均值的奇异列表。
解决方案
您可以使用 pandas 创建数据框。然后,您可以按行 [0] 分组,然后按平均值聚合(仅适用于所需的列)。但是,您还需要为其他列指定聚合方法。我会假设,您还需要这些列的平均值。
import pandas as pd
from numpy import mean
lines = [['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', 1, 10, 38, 0.0, 9,
20050407, 20170319, 0, 0, 0, 0, 1, 1, 281.6],
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', 1, 10, 38, 0.0, 9,
20050407, 20170319, 0, 0, 0, 0, 1, 1, 281.6],
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', 1, 10, 38, 0.0, 9,
20050407, 20170319, 0, 0, 0, 0, 1, 1, 281.6],
['QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ=', 1, 10, 38, 0.0, 9,
20050407, 20170319, 0, 0, 0, 0, 1, 1, 281.6]]
# I have removed the quotes around numbers for simplification but this can also be handled by pandas.
# create a data frame and give names to your fields.
# Here 'KEY' is the name of the first field we will use for grouping
df = pd.DataFrame(lines,columns=['KEY','a','b','c','d','e','f','g','h','i','j','k','l','m','n'])
这会产生这样的结果:
KEY a b c d e f g h i j k l m n
0 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1 10 38 0.0 9 20050407 20170319 0 0 0 0 1 1 281.6
1 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1 10 38 0.0 9 20050407 20170319 0 0 0 0 1 1 281.6
2 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1 10 38 0.0 9 20050407 20170319 0 0 0 0 1 1 281.6
3 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1 10 38 0.0 9 20050407 20170319 0 0 0 0 1 1 281.6
这是您正在寻找的操作:
data = df.groupby('KEY',as_index=False).aggregate(mean)
这产生:
KEY a b c d e f g h i j k l m n
0 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1 10 38 0.0 9 20050407 20170319 0 0 0 0 1 1 281.6
您可以使用字典按字段指定聚合类型(假设每个字段都为“均值”):
data = df.groupby('KEY',as_index=False).aggregate({'a':mean,'b':mean,'c':mean,'d':mean,'e':mean,'f':mean,'g':mean,'h':mean,'i':mean,'j':mean,'k':mean,'l':mean,'m':mean,'n':mean})
关于groupby的更多信息可以在这里找到:http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.agg.html
推荐阅读
- if-statement - 批发商店 - 如果声明不起作用
- javascript - 在整个页面上注册任何点击href
- swift - 在 SCNPlane (ARKit) 上漫反射动画 SpriteKit 场景
- tmux - 是否可以退出 tmux,同时“保留”终端中的窗口
- vba - 将谷歌脚本结果下载到 Excel VBA
- python - 将字典转换为可以转换的浮点数
- azure-ad-b2c - 无法创建目录
同时正在创建 Azure AD B2C - jenkins - 使用 Jenkins 管道多行/多行字符串参数
- console - OrientDB 3.0.4 控制台 EMBEDDEDLIST 创建顶点
- asp.net-core - 如何在自己的托管窗口上发布 asp.net Web 核心应用程序