以下是一个按行进行SUMIF和DATEDIF的解决方法的代码示例:
import pandas as pd
from datetime import datetime
# 创建示例数据
data = {'Name': ['John', 'Emily', 'James', 'Amy'],
'Start Date': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01'],
'End Date': ['2022-01-31', '2022-02-28', '2022-03-31', '2022-04-30'],
'Amount': [1000, 2000, 3000, 4000]}
df = pd.DataFrame(data)
# 将日期列转换为日期类型
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])
# 计算每行的日期差
df['Duration'] = (df['End Date'] - df['Start Date']).dt.days
# 计算每行的总和
df['Total Amount'] = df.apply(lambda row: df.loc[(df['Name'] == row['Name']) & (df['Start Date'] <= row['Start Date']) & (df['End Date'] >= row['End Date']), 'Amount'].sum(), axis=1)
print(df)
这段代码使用了Pandas库来处理数据。首先,将日期列转换为日期类型,然后计算每行的日期差并将结果存储在'Duration'列中。接下来,使用apply
函数来逐行计算总和。在lambda函数中,使用条件筛选出符合条件的行,并对它们的'Amount'列求和。最后,将结果存储在'Total Amount'列中。
输出结果如下:
Name Start Date End Date Amount Duration Total Amount
0 John 2022-01-01 2022-01-31 1000 30 1000
1 Emily 2022-02-01 2022-02-28 2000 27 2000
2 James 2022-03-01 2022-03-31 3000 30 3000
3 Amy 2022-04-01 2022-04-30 4000 29 4000
以上代码示例中使用了Pandas库来处理数据,通过创建DataFrame对象来存储数据,然后使用Pandas提供的函数和方法进行计算和筛选操作。
上一篇:按行进行数据帧的样条插值
下一篇:按行计数并将结果显示为列