找出一列中两个常见值的年份差异

时间:2014-04-24 06:19:28

标签: pandas group-by

我正在使用大熊猫,而且我试图找出数据按标签分组然后按团队分组的年份差异。我试图用一个小组来处理我正在处理的问题但是我无法得到我想要的结果。这是我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

1 个答案:

答案 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