Python Pandas按位置和日期/月平均值

时间:2018-02-24 00:15:55

标签: python python-3.x pandas

使用:Python 3.6,Pandas 0.22

我有一个.csv文件,我需要根据月份和位置获得平均值。这是数据中的一行,还有更多位置和日期:

NAME DATE SNOW GRAND RAPIDS GERALD R FORD INTERNATIONAL AIRPORT, MI US 1/1/2016, 0.7

到目前为止,我已根据月份和每月平均值成功对信息进行了排序:

df2 = pd.read_csv("Data.csv")

gname = df2.groupby('NAME')

for NAME,  NAME_df2 in gname:
    df2['DATE'] = pd.to_datetime(df2['DATE'])
    df2.groupby(df2['DATE'].dt.strftime('%B'))['SNOW'].mean().sort_values()

执行时:

  DATE
August       0.000000
July         0.000000
June         0.000000
September    0.000000
May          0.000562
October      0.000966
November     0.019712
April        0.155592
March        0.248475
February     0.319048
January      0.622969
December     1.129986
Name: SNOW, dtype: float64

我的问题是,此代码只是在无限循环中给出所有位置的每个月的总平均值。我无法弄清楚如何根据每个地点每月的平均降雪量来获取输出数据。

2 个答案:

答案 0 :(得分:3)

在迭代循环时修改循环中的DataFrame。这是错误的。

您需要按月和地点进行分组:

unstack()

您将获得具有两级多索引的DataFrame。您可以稍后通过{{1}} ing将其转换为表格。

答案 1 :(得分:0)

每月针对objid列中指定的每个地方,计算一个lname数字列的平均值,称为df

0。导入df['Sentiment']模块:

'Place'

1。数据框

生成具有列datetime from datetime import datetime 'date'的DataFrame:

'Sentiment'

2。将'Place'列转换为 date_rng = pd.date_range(start='1/1/2018', end='3/05/2018', freq='W') df = pd.DataFrame(date_rng, columns=['date']) df['Sentiment']=np.random.randint(0,100,size=(len(date_rng))) df['Place']=['home']*3 + ['With friends']*3 + ['School']*3 print(df) date Sentiment Place 0 2018-01-07 62 home 1 2018-01-14 55 home 2 2018-01-21 84 home 3 2018-01-28 65 With_friends 4 2018-02-04 3 With_friends 5 2018-02-11 26 With_friends 6 2018-02-18 9 School 7 2018-02-25 52 School 8 2018-03-04 74 School 的索引:然后从索引中检索 month 列表:

'date'

3。按组计算平均值:月和df

    df.set_index('date',inplace=True)
    months=df.index.month



                Sentiment         Place
    date                               
    2018-01-07         64          home
    2018-01-14         41          home
    2018-01-21         97          home
    2018-01-28         44  With_friends
    2018-02-04         37  With_friends
    2018-02-11         69  With_friends
    2018-02-18         15        School
    2018-02-25         42        School
    2018-03-04          4        School

4。 unstack()

按照上面的 @DYZ 的建议,您可以取消stackal_val的堆叠以获取有用的交叉表:

'Place'