使用python计算平均值

时间:2017-05-01 10:25:08

标签: python pandas

我有这样的临时数据:

date        tmax tmin dtr
2/13/2014   0   19  8
2/15/2014   2.8 15  10
1/29/2015   10  7   3
1/6/2016    3   4   -1
1/29/2016   2   2   0
5/5/2016    9   11  -2
5/7/2016    11  14  -3
1/29/2017   11  8   3

我需要能够选择DTR小于或等于零的所有行并执行以下操作。

  1. 对于那些DTR等于零的行,我想通过以下计算来替换tmax和tmin: 例如2016年1月29日,tmax =(10 + 11)/ 2即计算2016年和2017年2016年的平均值以及tmin的类似方式。

  2. 对于那些DTR小于零的行,我想用-99.9替换tmax和tmin

2 个答案:

答案 0 :(得分:0)

试试这样:

>>> df
        date  tmax  tmin   dtr
0  2/13/2014   0.0  19.0   8.0
1  2/15/2014   2.8  15.0  10.0
2  1/29/2015  10.0   7.0   3.0
3   1/6/2016   3.0   4.0  -1.0
4  1/29/2016   2.0   2.0   0.0
5   5/5/2016   9.0  11.0  -2.0
6   5/7/2016  11.0  14.0  -3.0
7  1/29/2017  11.0   8.0   3.0


>>> df.ix[df['dtr']<0, ['tmax', 'tmin']] = -99.9
>>> df.ix[df['dtr']==0, ['tmax', 'tmin']] = (10+11)/2
>>> df
        date  tmax  tmin   dtr
0  2/13/2014   0.0  19.0   8.0
1  2/15/2014   2.8  15.0  10.0
2  1/29/2015  10.0   7.0   3.0
3   1/6/2016 -99.9 -99.9  -1.0
4  1/29/2016  10.0  10.0   0.0
5   5/5/2016 -99.9 -99.9  -2.0
6   5/7/2016 -99.9 -99.9  -3.0
7  1/29/2017  11.0   8.0   3.0

答案 1 :(得分:0)

这可能就是你所追求的目标。

import pandas as pd

# reading the data
df = pd.read_csv('input_data.csv',
                 delim_whitespace=True,
                 index_col=0,
                 parse_dates=True,
                 dtype={'tmax': 'float',
                        'tmin': 'float',
                        'dtr': 'int'})

# setting tmax and tmin to -99.9 if dtr < 0
df.ix[df['dtr']<0, ['tmax', 'tmin']] = -99.9

# iterate over the rows
for row in df.itertuples():

# if the dtr is 0
if row.dtr == 0:

    # set date, d to the current row
    d = row.Index

    # get dates of desired rows before and after d
    before = pd.Timestamp(d.year-1, d.month, d.day)
    after = pd.Timestamp(d.year+1, d.month, d.day)

    # set tmax and tmin to average of the above dates' data
    df.ix[d, 'tmax'] = (df.ix[before].tmax + df.ix[after].tmax) / 2
    df.ix[d, 'tmin'] = (df.ix[before].tmin + df.ix[after].tmin) / 2

结果数据框为:

            tmax  tmin  dtr
date                       
2014-02-13   0.0  19.0    8
2014-02-15   2.8  15.0   10
2015-01-29  10.0   7.0    3
2016-01-06 -99.9 -99.9   -1
2016-01-29  10.5   2.0    0
2016-05-05 -99.9 -99.9   -2
2016-05-07 -99.9 -99.9   -3
2017-01-29  11.0   8.0    3