Python 我想交换行条件
我们有4列贷方、借方、叙述和余额。贷方列中的金额将在贷方到余额列中 借方栏金额将从余额栏中借记。我给出一个一个数据场作为参考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
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