Python 熊猫分组,平均值计算
我和熊猫一起工作 这是我的数据: 其中,每列分别为大陆(南部、南部、东部、岛屿、海洋、澳大利亚、澳大利亚)、状态(灭绝、历史、引入或现存)、目、科、属、种、对数质量、组合质量和参考 我试图比较每个大陆上大量的灭绝物种和现存物种。因此,我需要按“大陆”和“状态”对这个数据框进行分组,然后计算出每个种群的平均质量——灭绝物种和现存物种。(例如,我需要计算出非洲大陆所有灭绝物种的平均总质量,然后是非洲大陆所有现存物种的平均总质量等等) 我想创建一个csv文件,其中每行的第一个条目是大陆,第二个条目是该大陆现存物种的平均质量,第三个条目是该大陆上灭绝物种的平均质量,第四个条目是平均现存和平均灭绝质量之间的差 这是我目前的代码:Python 熊猫分组,平均值计算,python,loops,pandas,Python,Loops,Pandas,我和熊猫一起工作 这是我的数据: 其中,每列分别为大陆(南部、南部、东部、岛屿、海洋、澳大利亚、澳大利亚)、状态(灭绝、历史、引入或现存)、目、科、属、种、对数质量、组合质量和参考 我试图比较每个大陆上大量的灭绝物种和现存物种。因此,我需要按“大陆”和“状态”对这个数据框进行分组,然后计算出每个种群的平均质量——灭绝物种和现存物种。(例如,我需要计算出非洲大陆所有灭绝物种的平均总质量,然后是非洲大陆所有现存物种的平均总质量等等) 我想创建一个csv文件,其中每行的第一个条目是大陆,第二个条目是该
import pandas as pd
url="http://www.esapubs.org/archive/ecol/E084/094/MOMv3.3.txt"
mammalian_data = pd.read_csv(url, delimiter="\t", header=None,
names= ['continent', 'status', 'order', 'family', 'genus', 'species', 'log mass', 'combined mass', 'reference'])
AF_extant = mammalian_data.groupby(["continent", "status"]).get_group(("AF","extant"))
print(AF_extant["combined mass"].mean())
AF_extinct = mammalian_data.groupby(["continent", "status"]).get_group(("AF","extinct"))
print(AF_extinct["combined mass"].mean())
我如何在七大洲中的每一个重复这段代码?我如何使用这些信息创建一个新的数据框,然后将所有必要的条目导出到CSV文件,如上所述
请任何人帮帮忙
import pandas as pd
url="http://www.esapubs.org/archive/ecol/E084/094/MOMv3.3.txt"
mammalian_data = pd.read_csv(
url, delimiter="\t", header=None,
names=['continent', 'status', 'order', 'family', 'genus',
'species', 'log mass', 'combined mass',
'reference'])
result = mammalian_data.groupby(["continent", "status"])['combined mass'].mean()
result = result.unstack('status')
result['diff'] = result['extinct']-result['extant']
result = result[['extant', 'extinct', 'diff']]
屈服
status extant extinct diff
continent
AF 2.220823e+04 970038.461538 947830.232208
AUS 1.691833e+04 188355.555556 171437.228736
Af -9.990000e+02 NaN NaN
EA 2.114960e+04 NaN NaN
Insular 7.757171e+03 81912.131034 74154.960145
Oceanic 8.238885e+06 NaN NaN
SA 3.864696e+03 973072.402597 969207.706264
然后,您可以使用将结果
写入CSV
哺乳动物_数据。分组依据([“大陆”,“状态])[“组合质量]。平均值()
计算所有组的所有平均值:
In [35]: mammalian_data.groupby(["continent", "status"])['combined mass'].mean()
Out[35]:
continent status
AF extant 2.220823e+04
extinct 9.700385e+05
historical 1.475138e+05
AUS extant 1.691833e+04
extinct 1.883556e+05
historical 2.653043e+03
introduction 1.797469e+05
Af extant -9.990000e+02
EA extant 2.114960e+04
historical 2.014170e+05
Insular extant 7.757171e+03
extinct 8.191213e+04
historical 8.433233e+04
Oceanic extant 8.238885e+06
SA extant 3.864696e+03
extinct 9.730724e+05
Name: combined mass, dtype: float64
本系列具有2级多索引。级别为大陆
和状态
。要将状态
索引级别移动到列,请使用:
屈服
status extant extinct diff
continent
AF 2.220823e+04 970038.461538 947830.232208
AUS 1.691833e+04 188355.555556 171437.228736
Af -9.990000e+02 NaN NaN
EA 2.114960e+04 NaN NaN
Insular 7.757171e+03 81912.131034 74154.960145
Oceanic 8.238885e+06 NaN NaN
SA 3.864696e+03 973072.402597 969207.706264
然后,您可以使用将结果
写入CSV
哺乳动物_数据。分组依据([“大陆”,“状态])[“组合质量]。平均值()
计算所有组的所有平均值:
In [35]: mammalian_data.groupby(["continent", "status"])['combined mass'].mean()
Out[35]:
continent status
AF extant 2.220823e+04
extinct 9.700385e+05
historical 1.475138e+05
AUS extant 1.691833e+04
extinct 1.883556e+05
historical 2.653043e+03
introduction 1.797469e+05
Af extant -9.990000e+02
EA extant 2.114960e+04
historical 2.014170e+05
Insular extant 7.757171e+03
extinct 8.191213e+04
historical 8.433233e+04
Oceanic extant 8.238885e+06
SA extant 3.864696e+03
extinct 9.730724e+05
Name: combined mass, dtype: float64
本系列具有2级多索引。级别为大陆
和状态
。要将状态
索引级别移动到列,请使用:
谢谢你的更正…有没有办法创建一个for循环,这样我就只看灭绝/现存状态了。我可以一开始就创造这个条件吗?然后用你建议的第二种方法?我想要最有效的代码,而不必复制和粘贴这段代码来指定我正在查看的每个组,例如,下一个组将是get_组((“AF”,“exant”))有没有关于创建指定CSV文件的最简单和最有效方法的指示?感谢您的更正…有没有任何方法可以创建for循环,以便我只查看已消失/现存的状态。我可以一开始就创造这个条件吗?然后用你建议的第二种方法?我想要最有效的代码,而不必复制和粘贴此代码位来指定我正在查看的每个组,例如,下一个组将是get_group((“AF”,“extant”))创建指定CSV文件的最简单和最有效的方法有何指示?