Python 如何在数据帧中执行按行if和数学运算

Python 如何在数据帧中执行按行if和数学运算,python,pandas,Python,Pandas,输入数据: Period Invoice_No Amount Date Mar-19 123 5000.00 12-02-2019 Mar-19 124 5000.00 13-02-2019 Mar-19 125 7000.00 13-02-2019 Mar-19 126 5000.00 19-02-2019 Mar-19 127 500

输入数据:

Period   Invoice_No   Amount      Date
Mar-19    123         5000.00     12-02-2019
Mar-19    124         5000.00     13-02-2019
Mar-19    125         7000.00     13-02-2019
Mar-19    126         5000.00     19-02-2019
Mar-19    127         5000.00     25-02-2019
Mar-19    128         5000.00     27-02-2019
所以基本上要检查第一行金额(5000.00)是否等于第二行金额;然后执行日期差异功能(13-02-2019“-”12-02-2019),如果差异小于“5天”,则以下为输出。如果差异超过5天,则从输出中排除(行号4)


您可以移动日期以计算行之间的时间差。之后,我将筛选您定义的条件

df['Date_diff'] = df['Date'].shift(-1)
df['Date_diff'] = df.apply(lambda x: pd.Timedelta(x['Date_diff'] - x['Date']),axis=1)

mask = (df['Amount'] == df['Amount'].shift(-1)) & (df['Date_diff'] < pd.Timedelta('5 days'))
mask2 = (df['Amount'] == df['Amount'].shift(1)) & (df['Date_diff'].shift(1) < pd.Timedelta('5 days'))

print(df[mask | mask2].drop('Date_diff', axis=1))

   Period  Invoice_No  Amount       Date
0  Feb-19         123  5000.0 2019-02-12
1  Feb-19         123  5000.0 2019-02-13
df['Date_diff']=df['Date'].shift(-1)
df['Date_diff']=df.apply(λx:pd.Timedelta(x['Date_diff']-x['Date']),轴=1)
掩码=(df['Amount']==df['Amount'].shift(-1))&(df['Date_diff']
IICU:

df.sort_values(by=['Period','Date'], inplace=True)#Sortby Date
df['Date']=pd.to_datetime(df['Date'])
df['days']=df['Date'].diff().dt.days#Find days difference
df['Amountdiff']=df['Amount'].diff()#Find amount difference
df.fillna(0, inplace=True)#Fill any NaN/NaT
df2=df[df.Amountdiff==0]
df2.iloc[:,:4:]
结果


嗨,欢迎光临。看一看“shift”并发布您为解决问题而编写的代码。您好,.shift只会添加一个冒号并将日期上移/下移;但是如何在熊猫身上使用if呢?好吧,也许我理解错了。保留第1行是因为它与第3行的条件匹配?还是因为它属于第0行而保留?尝试使用此选项;但它仍然不能完全满足条件:它还给了我其他行,其中的差异不是“0”,错误是什么,你是什么版本的熊猫。我已经在不同的机器上试用过了,它可以正常工作。@Pratik,在没有警告的情况下发布答案并声称代码不起作用后,你编辑输出是不公平的。这不是你寻求的方式help@wwne字体我真的很抱歉!我使用了代码,意识到前面提到的输入数据中存在固有错误。很抱歉,我没有提到我已经更改了输入和输出问题主要是当我执行代码时,它可以工作并过滤大部分行;但还是有一些行不应该出现,有没有类似excel中“if”公式的代码;因此,我可以首先检查第0行和第1行中的金额,如果是“0”,则检查差额。
df.sort_values(by=['Period','Date'], inplace=True)#Sortby Date
df['Date']=pd.to_datetime(df['Date'])
df['days']=df['Date'].diff().dt.days#Find days difference
df['Amountdiff']=df['Amount'].diff()#Find amount difference
df.fillna(0, inplace=True)#Fill any NaN/NaT
df2=df[df.Amountdiff==0]
df2.iloc[:,:4:]