2016-12-07 32 views
4

我有一个数据帧Python的差值

name value 
A  2 
A  4 
A  5 
A  7 
A  8 
B  3 
B  4 
B  8 
C  1 
C  3 
C  5 

而且我想基于每个名称 这样

name value dif 
A  2  0 
A  4  2 
A  5  1 
A  7  2 
A  8  1 
B  3  0 
B  4  1 
B  8  4 
C  1  0 
C  3  2 
C  5  2 

谁能告诉我是最容易获得的价值差异办法?

回答

4

您可以使用GroupBy.diff来计算每个分组对象的连续行之间的差异。可选地,将缺失值(每组中的第一行)填充0并最终以整数形式输出。

df['dif'] = df.groupby('name')['value'].diff().fillna(0).astype(int) 
df 

enter image description here

+1

太感谢你了,还有一个问题,如果我想第一个排序的值,然后计算的差异,我该怎么办呢? – jimmy15923

+0

假设您想按升序对它们进行排序,您可以将'df.sort_values(['value'],inplace = True)'作为先前的步骤。如果你想排除他们,你可以做'df.sort_values(['value'],升序= False,inplace = True)'。这将按降序排列。在这种情况下,获得的差异将是负面的。 –