Python 我想交换行条件

Python 我想交换行条件,python,pandas,dataframe,analysis,Python,Pandas,Dataframe,Analysis,我们有4列贷方、借方、叙述和余额。贷方列中的金额将在贷方到余额列中 借方栏金额将从余额栏中借记。我给出一个一个数据场作为参考 Narration Credit Debit Balance 1 Abc 15.0 Nan 15.0 2 Qwe NaN 5.0 10.0 3 Wer NaN 2.0 7.0 4 opr Nan 3.0 5.0 5 Yur

我们有4列贷方、借方、叙述和余额。贷方列中的金额将在贷方到余额列中 借方栏金额将从余额栏中借记。我给出一个一个数据场作为参考

   Narration  Credit  Debit  Balance
1  Abc         15.0    Nan    15.0
2  Qwe         NaN     5.0    10.0 
3  Wer         NaN     2.0     7.0  
4  opr         Nan     3.0     5.0
5  Yur         6.0     NaN    11.0
我有这样的datafarme,但在这个3和4索引中,借方金额与余额值不匹配,所以我希望datafarme可以与余额匹配

  Narration  Credit  Debit  Balance
1  Abc         15.0    Nan    15.0
2  Qwe         NaN     5.0    10.0 
3  opr         NaN     3.0     7.0  
4  wer         Nan     2.0     5.0
5  Yur         6.0     NaN    11.0

我想要一个可以和借贷价值匹配的数据场。例如,只有5行,我有500行,所以我可以检查余额是否与借贷金额匹配。

如果我理解正确,您需要:Series.diff和np.where

我们得到余额中每行之间的差值,如果差值小于0,则取绝对值并将其分配给借方

请注意,我们必须导入numpy:


您还可以尝试以下使用np.select和df.mask的方法,并附带一些条件:

s=df['Credit'].fillna(df['Balance']).diff().abs()
cond1=s.ne(df['Debit'])
cond2=s.eq(df['Debit'].shift(-1))
cond3=s.shift().eq(df['Debit'])

values=np.select([(cond1[:,None]&cond2[:,None]),(cond1[:,None]&cond3[:,None])],
          [df.shift(-1),df.shift()])

final=df.mask(cond1&(cond2|cond3),values)
final['Balance']=df['Balance']

你所说的“匹配”是什么意思?如果金额贷记,那么余额值将为正,贷记,那么余额值将为负。我想他的意思是第2行的余额为10,第3行的余额为2,贷记,余额为7,应该是8,或者借方应该是第3行第4行。请分享借方金额的预期输出值。毫无疑问,如果贷方金额与余额不匹配,则此余额不会发生变化……我不会为此合并条件……对不起,但我不确定您想说什么@Jainamshah如果信用卡中出现同样的问题,那么我该怎么办?InvalidIndexError:仅对唯一值的索引对象重新编制索引有效如果三行之后有所需的值,那么我该如何转换该值..将shift-1替换为shift-2,将shift替换为shift-2,然后重试@jainamshah@jainamshah你也必须注意不同的问题,但我认为这应该是一个不同的问题
import numpy as np
s=df['Credit'].fillna(df['Balance']).diff().abs()
cond1=s.ne(df['Debit'])
cond2=s.eq(df['Debit'].shift(-1))
cond3=s.shift().eq(df['Debit'])

values=np.select([(cond1[:,None]&cond2[:,None]),(cond1[:,None]&cond3[:,None])],
          [df.shift(-1),df.shift()])

final=df.mask(cond1&(cond2|cond3),values)
final['Balance']=df['Balance']
  Narration Credit Debit  Balance
1       Abc     15   NaN     15.0
2       Qwe    NaN     5     10.0
3       opr    NaN     3      7.0
4       Wer    NaN     2      5.0
5       Yur      6   NaN     11.0