我意识到这是一个相当基本的问题,但我无法通过搜索找到我想要的东西(部分原因是因为我不确定如何总结我想要的东西)。在任何情况下:
我的数据框包含以下列:
* ID(每个代表一个特定的大学课程)
*年份
*期限(0 =秋季学期,1 =春季学期)
*评级(从0到5)
我的目标是为Previous Rating创建另一个列。此栏目将等于上次课程举办时的课程评分,并且该课程的第一次提供将为NaN。目标是使用上次提供课程时的课程评级,以预测当前学期的入学率。我正在努力弄清楚如何找到给定行的每个课程的最后一个提供。
感谢您在执行此操作时提供的任何帮助!我在Pandas工作,但如果能让它变得更容易,我可以将我的数据移到R.如果我需要澄清我的问题,请告诉我。
答案 0 :(得分:3)
我认为有两个关键点:(1)按年份和术语排序,以便顺序对应时间顺序; (2)在选择和转移评级之前,使用groupby
收集ID。所以,从像
>>> df
ID Year Term Rating
0 1 2010 0 2
1 2 2010 0 2
2 1 2010 1 1
3 2 2010 1 0
4 1 2011 0 3
5 2 2011 0 3
6 1 2011 1 4
7 2 2011 1 0
8 2 2012 0 4
9 2 2012 1 4
10 1 2013 0 2
我们得到了
>>> df = df.sort(["ID", "Year", "Term"])
>>> df["Previous_Rating"] = df.groupby("ID")["Rating"].shift()
>>> df
ID Year Term Rating Previous_Rating
0 1 2010 0 2 NaN
2 1 2010 1 1 2
4 1 2011 0 3 1
6 1 2011 1 4 3
10 1 2013 0 2 4
1 2 2010 0 2 NaN
3 2 2010 1 0 2
5 2 2011 0 3 0
7 2 2011 1 0 3
8 2 2012 0 4 0
9 2 2012 1 4 4
请注意,我们实际上并不需要按ID
进行排序 - 如果没有它,groupby的工作效果会相同 - 但这样就更容易看出转变已经完成正确的事情。阅读split-apply-combine模式可能会有所帮助。
答案 1 :(得分:1)
使用此功能创建新列... DataFrame.shift(句点= 1,freq =无,轴= 0,** kwds) 使用可选的时间频率
按期望的周期数移动索引答案 2 :(得分:0)
假设你有一个像这样的数据框......
ID Rating Term Year
1 1 0 2002
2 2 1 2003
3 3 0 2004
2 4 0 2005
其中ID是课程ID,您根据年份和学期为每个ID分配多个条目。您的目标是根据ID以及最近的年份和期限查找行。
为此,你可以这样做......
df[((df['Year'] == max(df.Year)) & (df['ID'] == 2) & (df['Term'] == 0))]
我们通过给定的ID和术语以及课程的最后一次提供来找到课程。如果你想要评级,那么你可以做
df[((df['Year'] == max(df.Year)) & (df['ID'] == 2) & (df['Term'] == 0))].Rating
希望你试图完成这个结果。
感谢。