Pandas 查找列中两个常用值的年差

Pandas 查找列中两个常用值的年差,pandas,group-by,Pandas,Group By,我使用的是熊猫,我试图找出不同年份的差异,当我的数据按标签分组,然后按团队分组时。我已经尝试使用groupby来解决我正在处理的问题,但是我不能得到我想要的结果。这是我的df的头部(8) 所以,让我困惑的是,我想要的基本上有两个群体——标签和团队。然后我需要找出将被排序的年份之间的差异,结果将出现在差异列中。任何帮助都将不胜感激 Team Year labels difference Hawks 2001 b NAN Haw

我使用的是熊猫,我试图找出不同年份的差异,当我的数据按标签分组,然后按团队分组时。我已经尝试使用groupby来解决我正在处理的问题,但是我不能得到我想要的结果。这是我的df的头部(8)

所以,让我困惑的是,我想要的基本上有两个群体——标签和团队。然后我需要找出将被排序的年份之间的差异,结果将出现在差异列中。任何帮助都将不胜感激

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

不确定最后一行的标签是“a”还是“b”。从您的数据片段:

Hawks           2003      a
根据您的预期输出:

Hawks           2003      b        2
我将假定
标签
应为“b”,以便我可以匹配您的预期输出:

Hawks           2003      b        2
你需要在['Team','Labels']上做一个groupby,你可以用它来计算年差。但首先,请按['Team'、'labels'、'Year']对数据进行排序,以便您的年度差异计算是正确的:

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
现在,在['Team','labels']上进行分组,并计算组中每一行的年份差:

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

数据中最后一行的标签为“a”,但expect输出的标签为“b”。这是打字错误吗?非常感谢-我不知道你可以用两个栏目分组-这是我的问题。我的一个问题是为什么在diff(1)中有一个1?你是对的;您可以只执行
diff()
,因为默认值是
periods=1
。我只是直截了当。哦,谢谢!事实上我对此一无所知。不过真的很有帮助!