希望根据某些日期是否在python中的某个时间之间来查找唯一会员的付款总额



这是我第一次在社区上提问,尽管我过去曾广泛使用该网站寻求帮助。我没能找到这个特定问题的解决方案,而且我对python相当熟悉,所以很难将逻辑放入代码中,尽管我认为逻辑足够清晰。我通过谷歌colab使用python,并在最后分享了一份带有数据的谷歌表单。

在我的场景中,我们有一个开始月份、时间长度和支付月份。月末可以通过长度进行计算。一个人可以是多个组的一部分,因此可以有多个开始、结束和支付月份。

目标是找出会员在今天休息时预计要支付的费用。

eg集团成立于2020年1月,为期10个月,将于2020年10月结束。每月捐款5000英镑。支出月份是2020年3月。虽然从技术上讲,我们应该得到10笔付款(10个月组(,但我们预计只有9笔付款,即4.5万,因为当付款月份到来时,会员预计不会为该月付款。如果说该小组始于2020年12月,如果为期10个月,那么截至今天,我们预计只会收到5笔付款(12月至4月21日(。

这些情况会变得复杂,例如,当一名成员属于3个组时,则有3个开始日期、3个结束日期和3个支付日期,可能还有3个不同的分期付款金额。假设开始日期是1月20日、2月20日和3月20日,所有小组的时间都是10个月。也可以说,4月20日有一笔支出。在4月20日,所有小组都将处于活动状态(尚未到达最后一个月(,因此在4月(支出月(,我们预计所有小组都不会付款。

这意味着,如果有3个小组,并且在月初和月底的任何小组之间都有一笔支出,那么我们预计该小组在当月不会得到付款。如果在小组的开始和结束月份之间有两次付款,那么我们预计当月不会有6次付款,每组2次,依此类推。如果说3个小组和1次付款只在2个小组的日期之间,那么我们不会预计只为这两个小组分期付款(这些小组的分期付款是多少(

下面的谷歌表单有一些示例数据。组ID列是完全唯一的,不会有重复(您可以将其视为发票,因为所有发票都是唯一的(。成员代码列可以有重复项,因为一个成员可以有多个组。不要担心日期中的日子,重要的是月份和年份。我们有开始月份,组长度和支付月份。我们还知道该团体的成员每月欠多少钱。https://docs.google.com/spreadsheets/d/1nAXlifIQdYiN1MWTv7vs2FqbFu2v6ykCzQjrJNPTBWI/edit#gid=0

任何帮助或建议都会很棒。

已编辑->我尝试了以下操作,但出现了错误:(我对月份进行了编码,即2020年1月=1,2020年2月=2,依此类推,所以我不必在日期上乱搞(

deal_list = df['Group ID'].tolist()
def instalment(deal_list):
for member in df['Member Code'].unique():
if df['Coded Payout Month']>=df['Coded Start Month'] and df['Coded 
Payout Month']<=df['Coded End Month']: 
count_months = count_months + 1
return count_months * df['Instalment']
instalment(deal_list)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

编辑-刚才也尝试了以下操作(得到了Pandas的帮助:Groupby和在组内用条件语句迭代?(。这有点奏效,因为它给了我每行1的计数。我试图获得每个支出月在一个组的日期内出现的次数

grouped = df.groupby('Member Code')
for g_idx, group in grouped:
for r_idx, row in group.iterrows():
if (((row['Coded Payout Month'] >= group['Coded Start Month']).any())
& (row['Coded Payout Month'] <= group['Coded End Month']).any()):
df.loc[r_idx, 'payout_cut'] =+ 1

print(df)

我找到了一种绕过它的方法。本质上,不是试图遍历所有行,我首先通过转置和过滤在谷歌表单中将数据转换为长格式(我过滤了一个会员的所有支出月份,并将结果转换到行中。然后,我将其推送到colab中,并通过pd.melt将数据转换回每次交易的唯一行中,并根据需要进行额外的支出。然后,运行条件就足够简单,最终求出所有真实值。

我可以解释更多任何人需要的东西。我从这里获得了灵感:https://youtu.be/pKvWD0f18Pc

最新更新