大Pandas分组,平均值的计算

2024-05-20 08:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我和熊猫一起工作。你知道吗

这是我的数据:http://www.esapubs.org/archive/ecol/E084/094/MOMv3.3.txt 其中每一列分别是大陆(南美洲、南美洲、大洋洲、澳大利亚、澳大利亚)、状态(灭绝、历史、引进或现存)、目、科、属、种、对数质量、组合质量和参考。你知道吗

我试图比较每一个大陆的大量灭绝物种和现存物种。因此,我需要将这个数据框按“大陆”和“状态”进行分组,然后计算出每一组物种的平均质量——灭绝物种和现存物种。(例如,我需要计算出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文件-如上所述。你知道吗

有谁能帮上忙吗!你知道吗


Tags: 数据data物种status质量条目massaf
1条回答
网友
1楼 · 发布于 2024-05-20 08:21:15
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写入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级多索引。水平为continentstatus。要将status索引级别移动到列,请使用^{} 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

相关问题 更多 >