pandas - DataFrame的行和列之间的迭代以计算平均值
问题描述
我有一个数据框,内容如下:
A 2007/Ago 2007/Set 2007/Out ... 2020/Jan 2020/Fev
row1 x number number number ... number number
row2 y number number number ... number number
row3 w number number number ... number number
...
row27 z number number number ... number number
我的意思是,每个单元格中都有数字。我想计算列以 2007 开头的单元格的平均值,然后计算列以 2008 开头的单元格的平均值,然后是 2009,...,然后是 2020 并对每一行执行此操作.
我试图描绘的是这样的:
x = []
for i in df.row(i): #that is, for each row of the dataframe
if column.startswith('j'): #which starts with j=2008, 2009, 2010 etc
x += df[i][j] #the variable x gets the number on that row i,column j and sum
我到底想要的是各种列,每年的平均值,也就是说,我想要
result1 result2 result3 ... resultn
mean colums mean colums mean columsn mean columsn
starts starts starts starts
with 2008 with 2009 with 2010 with 2020
也就是说,我想要 13 个新列:每个平均值一个(从 2008 年到 2020 年)。
我无法继续这个循环,我不知道这有多基本,但我的问题是:
1-有没有更优化的方法来做到这一点?我的意思是,使用循环以外的熊猫函数?
在我的数据框中,每个单元格对应于该月的总医疗支出成本,我想取全年成本的平均值,将其与每个城市的人口(这是 thw 行)进行比较。我为此苦苦挣扎了一段时间,但无法解决。我使用熊猫的水平非常基础。
PS:对于数据框表示抱歉,我不知道如何在stackoverflow的正文问题中正确写一个。
解决方案
通过melt
+的选项pivot_table
, aggfunc 设置为:
import pandas as pd
df = pd.DataFrame({
'A': {'row1': 'x', 'row2': 'y', 'row3': 'w', 'row27': 'z'},
'2007/Ago': {'row1': 1, 'row2': 2, 'row3': 3, 'row27': 4},
'2007/Set': {'row1': 5, 'row2': 6, 'row3': 7, 'row27': 8},
'2007/Out': {'row1': 9, 'row2': 10, 'row3': 11, 'row27': 12},
'2020/Jan': {'row1': 13, 'row2': 14, 'row3': 15, 'row27': 16},
'2020/Fev': {'row1': 17, 'row2': 18, 'row3': 19, 'row27': 20}
})
df = df.melt(id_vars='A', var_name='year')
# Rename month columns to their year value
df['year'] = df['year'].str.split('/').str[0]
# pivot to wide format based on the new year value
df = (
df.pivot_table(columns='year', index='A', aggfunc='mean')
.droplevel(0, 1)
.rename_axis(None)
.rename_axis(None, axis=1)
)
print(df)
df
:
2007 2020
w 7 17
x 5 15
y 6 16
z 8 18
推荐阅读
- python - 在python中为json正文请求添加一个值
- github - 如何修复 Airflow 中的 CloneUserRepository 和 DestroyContainer 等故障?
- flutter - 通过 Draggable&DragTarget 重新排序时如何保持我的小部件状态?
- c++ - 如何使用花括号 {} 初始化类的对象
- javascript - 如何从开始日期和结束日期过滤给定范围的日期?
- c# - 使用 lambda 根据集合中先前的对象值更新集合中的对象
- python - 使用“with open”打开多个文件以在 Python 中读/写,而不专门枚举和列出每个文件?
- autodesk-designautomation - 使用 AutoCAD 设计自动化的不同 FileOpenMode
- batch-file - 安装 ODI 12.2.1.4 期间 RCU.bat 文件未执行
- c - 加载内核模块时出现未知符号