【发布时间】:2014-10-05 19:39:46
【问题描述】:
我有一个 Pandas 数据框,其中包含多个联赛和赛季的运动成绩和统计数据。
df = pd.DataFrame({'Season' : ['2010', '2010', '2010', '2010', '2011', '2011', '2011', '2011', '2011', '2011'],
'League' : ['A', 'A', 'B', 'A', 'B', 'A', 'A', 'A', 'B', 'B'],
'Date' : [datetime.date(2010, 8, 9), datetime.date(2010, 8, 9), datetime.date(2010, 8, 15), datetime.date(2010, 8, 15), datetime.date(2011, 8, 13),
datetime.date(2011, 8, 14), datetime.date(2011, 9, 1), datetime.date(2011, 9, 1), datetime.date(2011, 9, 4), datetime.date(2011, 9, 7)],
'Team' : ['Bulls', 'Bunnies', 'Bears', 'Bunnies', 'Bulls', 'Dogs', 'Bears', 'Dogs', 'Bears', 'Bunnies'],
'Score' : [75, 95, 65, 81, 83, 77, 67, 49, 82, 68]})
我想将 Z 分数映射到每个团队的特定统计数据帧上。 Z 分数可跟踪一支球队与其联盟中其他球队相比的表现。
这个函数做我想做的事并返回一个字典,但我不知道如何将字典映射到数据框,或者它是否是最好的方法。
import scipy.stats as ss
def makeCumZScoreMap(ratingType, frame, lg, season, dateObj):
zScoreDict = {}
sampleFrame = frame[(frame.League == lg) & (frame.Season == season) & (frame.Date <= dateObj)]
rating = sampleFrame.groupby(['Team'])[ratingType].mean()
for x, y in dict(pd.Series(ss.zscore(rating, ddof=1), rating.index)).iteritems():
zScoreDict[x] = y
return zScoreDict
这将返回一个字典,其中包含“2010”赛季“A”联赛“2010-08-09”或之前的比赛的数据框“得分”列的 Z 得分。
makeCumZScoreMap('Score', df, 'A', '2010', datetime.date(2010, 8, 9))
这将是所需输出的示例:
Date League Score Season Team Zscore
0 2010-08-09 A 75 2010 Bulls 0.70
1 2010-08-09 A 95 2010 Bunnies -0.70
2 2010-08-15 B 65 2010 Bears nan
3 2010-08-15 A 81 2010 Bunnies etc.
4 2011-08-13 B 83 2011 Bulls
5 2011-08-14 A 77 2011 Dogs
6 2011-09-01 A 67 2011 Bears
7 2011-09-01 A 49 2011 Dogs
8 2011-09-04 B 82 2011 Bears
9 2011-09-07 B 68 2011 Bunnies
【问题讨论】:
-
你如何调用你的函数? (什么是
ratingType等等。) -
ratingType 是我要计算 Z 分数的列,在示例中它是“分数”
-
但是你能举个例子来说明你是怎么称呼它的吗(即编辑你的问题)?
ss指的是什么? -
ok ss 是 scipy.stats
标签: python pandas python-2.x