我正在和熊猫一起工作。
这是我的数据:http://www.esapubs.org/archive/ecol/E084/094/MOMv3.3.txt 每列是大陆(SA,NA,EA,岛屿,海洋,澳大利亚,AF),状态(灭绝,历史,介绍或现存),订单,家庭,属,物种,对数质量,组合质量和参考,分别
我试图比较每个大陆的大量已灭绝和现存的物种。因此,我需要将这个数据框组合为“大陆”和“状态”,然后计算出每个物种的每个群体的平均质量 - 已灭绝和现存的物种。 (例如,我需要计算出大陆AF中所有已灭绝物种的平均总质量,然后是非洲大陆所有现存物种的平均总质量。等等。)
我想创建一个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())
如何为7大洲的每一个重复此代码?如何使用此信息创建新数据框,然后导出到包含所有必要条目的CSV文件 - 如上所述。
任何人都可以帮忙!
答案 0 :(得分:2)
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
然后,您可以使用result.to_csv('out.csv')
将result
写入CSV。
mammalian_data.groupby(["continent", "status"])['combined mass'].mean()
计算所有组的所有方法:
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级MultiIndex。级别为continent
和status
。要将status
索引级别移至列,请使用unstack
method:
In [36]: mammalian_data.groupby(["continent", "status"])['combined mass'].mean().unstack()
Out[36]:
status extant extinct historical introduction
continent
AF 2.220823e+04 970038.461538 147513.750000 NaN
AUS 1.691833e+04 188355.555556 2653.043478 179746.852941
Af -9.990000e+02 NaN NaN NaN
EA 2.114960e+04 NaN 201417.000000 NaN
Insular 7.757171e+03 81912.131034 84332.326000 NaN
Oceanic 8.238885e+06 NaN NaN NaN
SA 3.864696e+03 973072.402597 NaN NaN