如何在熊猫数据框中执行按行if和数学运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在熊猫数据框中执行按行if和数学运算相关的知识,希望对你有一定的参考价值。

输入数据:

Period   Invoice_No   Amount      Date
Mar-19    123         5000.00     12-02-2019
Mar-19    124         5000.00     13-02-2019
Mar-19    125         5000.00     19-02-2019
Mar-19    126         5000.00     25-02-2019
Mar-19    127         5000.00     27-02-2019

因此,基本上要检查第一行的金额(5000.00)是否等于第二行的金额;然后执行日期差异功能(13-02-2019“-” 12-02-2019),如果差异小于“ 5天”,则输出以下内容。如果差异超过5天,则从输出中排除(第4行)

Period   Invoice_No   Amount      Date
Mar-19    123         5000.00     12-02-2019
Mar-19    124         5000.00     13-02-2019
Mar-19    126         5000.00     25-02-2019
Mar-19    127         5000.00     27-02-2019
答案

您可以移动日期以计算行之间的时间增量。在对您定义的条件进行过滤之后。

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
另一答案

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.days<=5)&(df.Amountdiff==0)]#Filter day difference not more 5 and Amount is zero
df2.iloc[:,:4:]

结果

enter image description here

以上是关于如何在熊猫数据框中执行按行if和数学运算的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框中的分割行

如何在熊猫数据框中执行不同值的累积和

如何在熊猫数据框中执行左外连接?

使用“或”在熊猫数据框中选择值时如何编写条件[重复]

如何将包装为字符串的向量转换为熊猫数据框中的numpy数组?

如何在 python 中并行化以下代码片段?