python - 如何用 Pandas 计算逗号分隔列的平均值?
问题描述
让我们考虑以下 CSV 文件test.csv
:
"x","y","A","B"
8000000000,"0,1","0.113948,0.113689",0.114042
8000000000,"0,1","0.114063,0.113823",0.114175
8000000000,"0,1","0.114405,0.114366",0.114524
8000000000,"0,1,2,3","0.167543,0.172369,0.419197,0.427285",0.427576
8000000000,"0,1,2,3","0.167784,0.172145,0.418624,0.426492",0.428736
8000000000,"0,1,2,3","0.168121,0.172729,0.419768,0.427467",0.428578
我的目标是按列"x"
和对行进行分组,并计算列和"y"
的算术平均值。"A"
"B"
我的第一种方法是在 Pandas中使用groupby()
and的组合:mean()
import pandas
if __name__ == "__main__":
data = pandas.read_csv("test.csv", header=0)
data = data.groupby(["x", "y"], as_index=False).mean()
print(data)
运行此脚本会产生以下输出:
x y B
0 8000000000 0,1 0.114247
1 8000000000 0,1,2,3 0.428297
正如我们所见,实现单值列的目标"B"
很简单。但是,该列"A"
被省略。相反,我希望该列"A"
带有一个包含每个逗号分隔值的算术平均值的字符串。所需的输出应如下所示:
x y A B
0 8000000000 0,1 0.114139,0.113959 0.114247
1 8000000000 0,1,2,3 0.167816,0.172414,0.419196,0.427081 0.428297
有人知道怎么做这个吗?
解决方案
您可以创建一个自定义聚合函数,将这些字符串解析为列表,查找每列的平均值,并将它们格式化为字符串:
def string_mean(rows):
data_list = []
for row in rows:
data_list.append([float(item) for item in row.split(",")])
data = np.array(data_list)
return ",".join([f"{item:.6f}" for item in data.mean(axis=0)])
df.groupby(["x", "y"], as_index=False).agg({"A": string_mean, "B": "mean"})
返回
x y A B
0 8000000000 0,1 0.114139,0.113959 0.114247
1 8000000000 0,1,2,3 0.167816,0.172414,0.419196,0.427081 0.428297
请注意,如果 A 中的字符串在单个组中具有不同数量的列,则会出错。
顺便说一句,您可能可以清理我上面的功能
推荐阅读
- sulu - 苏禄更新 1.6 > 2.0 - we_analytics
- javascript - 在滚动条上更改徽标颜色 (JavaScript)
- python - 命令“python setup.py egg_info”在 /tmp/pip-install-xaum7z8f/supervisor/ 中失败,错误代码为 1
- java - 我需要找到数组中的第一个事件?
- amazon-web-services - 使用 SNS 通知通道启动 Textract 作业时出现 InvalidParameterException
- c++ - std::basic_string 每次都会破坏空终止吗?
- python - ecdf 中的彩色线条
- javascript - 使用 JavaScript 将 ap 标签添加到页脚
- netsuite - 如何在 Netsuite 保存的搜索公式中捕获异常?
- reactjs - Gatsby-GraphQL - 从 postgres 服务器获取远程数据