我有一个比较复杂的情况。假设我有以下贷款数据框案例:
test_df = pd.DataFrame({'name': ['Jack','Jill','John','Jack','Jill'],
'date': ['2016-08-08','2016-08-08','2016-08-07','2016-08-08','2016-08-08'],
'amount': [1000.0,1500.0,2000.0,2000.0,3000.0],
'return_amount': [5000.0,2000.0,3000.0,0.0,0.0],
'return_date': ['2017-08-08','2017-08-08','2017-08-07','','2017-08-08']})
test_df.head()
amount date name return_amount return_date
0 1000.0 2016-08-08 Jack 5000.0 2017-08-08
1 1500.0 2016-08-08 Jill 2000.0 2017-08-08
2 2000.0 2016-08-07 John 3000.0 2017-08-07
3 2500.0 2016-08-08 Jack 0.0
4 2500.0 2016-08-08 Jill 0.0 2017-08-08
在按名称分组(按人员分组的贷款)后,我需要执行一些操作:
1)return amount
需要按 比例 分配给 amount
的总和。
2)如果某个人的任何贷款的return date
丢失,则所有的return dates
都应转换为空字符串''。
我已经有一个用于分配比例回报金额的函数:
def allocate_return_amount(group):
loan_amount = group['amount']
return_amount = group['return_amount']
sum_amount = loan_amount.sum()
sum_return_amount = return_amount.sum()
group['allocated_return_amount'] = (loan_amount/sum_amount) * sum_return_amount
return group
我使用 grouped_test_df = grouped_test_df.apply(allocate_return_amount)
来应用它。
我正在努力完成的是第二个操作,检查是否有人的任何贷款缺少return_date
,如果是,则将该人的所有return_dates
更改为''。
我在pandas文档中找到了GroupBy.all,但还没有弄清楚如何使用,有经验的人可以帮忙吗?
由于这个例子可能有点难以理解,以下是我对这个例子的理想输出:
ideal_test_df.head()
amount date name return_amount return_date
0 1000.0 2016-08-08 Jack 0.0 ''
1 1500.0 2016-08-08 Jill 666.66 2017-08-08
2 2000.0 2016-08-07 John 3000.0 2017-08-07
3 2500.0 2016-08-08 Jack 0.0 ''
4 2500.0 2016-08-08 Jill 1333.33 2017-08-08
希望这有意义,非常感谢任何愿意花时间帮助我的熊猫专家!
return_amount
是零?是因为缺少return_date
吗? - Psidomreturn_date
变为空白。如果return_amount
也变为零,那太好了,但我将以return_date
作为逻辑基础。 - unpairestgood