使用: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
我的问题是,此代码只是在无限循环中给出所有位置的每个月的总平均值。我无法弄清楚如何根据每个地点每月的平均降雪量来获取输出数据。
答案 0 :(得分:3)
在迭代循环时修改循环中的DataFrame。这是错误的。
您需要按月和地点进行分组:
unstack()
您将获得具有两级多索引的DataFrame。您可以稍后通过{{1}} ing将其转换为表格。
答案 1 :(得分:0)
每月针对objid
列中指定的每个地方,计算一个lname
数字列的平均值,称为df
:
df['Sentiment']
模块:'Place'
生成具有列datetime
, from datetime import datetime
,'date'
的DataFrame:
'Sentiment'
'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'
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
按照上面的 @DYZ 的建议,您可以取消stackal_val的堆叠以获取有用的交叉表:
'Place'