我正在使用大熊猫,而且我试图找出数据按标签分组然后按团队分组的年份差异。我试图用一个小组来处理我正在处理的问题但是我无法得到我想要的结果。这是我df的头部(8)
Team Year labels
Hawks 2001 b
Hawks 2004 b
Nets 1987 b
Nets 1988 a
Nets 2004 b
Nets 2001 a
Nets 2000 c
Hawks 2003 a
所以,令我困惑的是基本上我想要的两个小组 - 标签和团队。然后我需要找出将要排序的年份与结果将在差异列中的差异。任何帮助将不胜感激。
Team Year labels difference
Hawks 2001 b NAN
Hawks 2004 b 1
Nets 1987 b NAN
Nets 1988 a NAN
Nets 2004 b 17
Nets 2001 a 13
Nets 2000 c NAN
Hawks 2003 b 2
答案 0 :(得分:0)
不确定最后一行的label
是否应该是' a'或者' b'。来自您的数据摘要:
Hawks 2003 a
从您预期的输出:
Hawks 2003 b 2
我假设label
应该是' b'所以我可以匹配你的预期输出:
您希望在['团队','标签']上进行分组,您可以使用它来计算年份差异。但首先按照['团队','标签'年份']排序您的数据,以便您的年度差异计算正确无误:
In [8]: df.sort(['Team','labels','Year'],inplace=True)
In [9]: df
Out[9]:
Team Year labels
0 Hawks 2001 b
7 Hawks 2003 b
1 Hawks 2004 b
3 Nets 1988 a
5 Nets 2001 a
2 Nets 1987 b
4 Nets 2004 b
6 Nets 2000 c
现在,在['团队','标签']上进行分组,并计算群组中每行的年份差异:
In [10]: df['difference'] = df.groupby(['Team','labels'])['Year'].diff(1)
In [11]: df
Team Year labels difference
0 Hawks 2001 b NaN
7 Hawks 2003 b 2
1 Hawks 2004 b 1
3 Nets 1988 a NaN
5 Nets 2001 a 13
2 Nets 1987 b NaN
4 Nets 2004 b 17
6 Nets 2000 c NaN
如果由于某种原因你想要回到数据帧的原始顺序,你可以执行以下操作:
In [12]: df.sort_index()
Out[12]:
Team Year labels difference
0 Hawks 2001 b NaN
1 Hawks 2004 b 1
2 Nets 1987 b NaN
3 Nets 1988 a NaN
4 Nets 2004 b 17
5 Nets 2001 a 13
6 Nets 2000 c NaN
7 Hawks 2003 b 2