Python 如何减去参考表中关联列的行值

Python 如何减去参考表中关联列的行值,python,pandas,dataframe,subtraction,Python,Pandas,Dataframe,Subtraction,我想将行中的连续值减去其他列中的值 数据框如下所示: A B 1 "Sat" 7 2 "Sat" 9 3 "Sat" 5 4 "Sun" 8 5 "Sun" 4 6 "Sun" 6 A B 1 "Sat" 0 2 "Sat" +2 3 "Sat" -4 4 "Sun" 0 5 "Sun" -

我想将行中的连续值减去其他列中的值

数据框如下所示:

     A        B    
1   "Sat"     7  
2   "Sat"     9
3   "Sat"     5
4   "Sun"     8  
5   "Sun"     4
6   "Sun"     6
     A        B    
1   "Sat"     0  
2   "Sat"    +2
3   "Sat"    -4
4   "Sun"     0  
5   "Sun"    -4
6   "Sun"     2
我想减去B列相对于A列的连续值,输出如下:

     A        B    
1   "Sat"     7  
2   "Sat"     9
3   "Sat"     5
4   "Sun"     8  
5   "Sun"     4
6   "Sun"     6
     A        B    
1   "Sat"     0  
2   "Sat"    +2
3   "Sat"    -4
4   "Sun"     0  
5   "Sun"    -4
6   "Sun"     2
我一直在使用
df.diff()
在整个数据帧中实现这一点,但在这里它就像(key,value),其中key来自一列,而多个值来自B列。我想减去B列中的值,只要列中的键是“Sat”,当它遇到列中的第二个键“Sun”时,应该重新开始减法

解决此问题有什么帮助吗?

如有必要,请首先按列
A
,然后使用,用于替换
NaN

如果需要转换为
int

df['B'] = df.sort_values('A').groupby('A')['B'].diff().fillna(0).astype(int)
print (df)
     A  B
1  Sat  0
2  Sat  2
3  Sat -4
4  Sun  0
5  Sun -4
6  Sun  2
另一个解决方案是,其中add
0
if不等于ed列
A
by:


假设列
'A'
中的组始终在一起

a, b = df.A.values, df.B.values
np.append(0, np.where(a[:-1] == a[1:], np.diff(b), 0))

array([ 0,  2, -4,  0, -4,  2])
我们可以用

a, b = df.A.values, df.B.values
df.assign(B=np.append(0, np.where(a[:-1] == a[1:], np.diff(b), 0)))

     A  B
1  Sat  0
2  Sat  2
3  Sat -4
4  Sun  0
5  Sun -4
6  Sun  2
或者我们可以严格遵守
pandas

df.assign(B=df.B.diff().where(df.A == df.A.shift(), 0).astype(int))

     A  B
1  Sat  0
2  Sat  2
3  Sat -4
4  Sun  0
5  Sun -4
6  Sun  2
定时
小数据

较大的数据