我有一个pandas数据帧,每个id值包含许多行数据,如下所示。
account_id final_premium days_since_first_sale ...
0003eDas 42.50 1
0003eDas 24.80 5
0003eDas 80.80 7
0215fweD 34.25 4
4sdfsw34 21.00 5
4sdfsw34 10.00 8
我添加了一个生存期值列,它是按每个account_ids final_premium的总和分组的,但它在每个id行中打印LTV值,如以下
account_id final_premium days_since_first_sale LTV
0003eDas 42.50 1 148.10
0003eDas 24.80 5 148.10
0003eDas 80.80 7 148.10
0215fweD 34.25 4 34.25
4sdfsw34 21.00 5 31.00
4sdfsw34 10.00 8 31.00
我要找的是这种格式:
account_id final_premium days_since_first_sale LTV
0003eDas 42.50 1
0003eDas 24.80 5
0003eDas 80.80 7 148.10
0215fweD 34.25 4 34.25
4sdfsw34 21.00 5
4sdfsw34 10.00 8 31.00
LTV值仅出现在该id的最终条目旁边。
到目前为止,我已经尝试过使用pandas.rendex((和.merge((函数,但都没有成功。还有其他方法我可以试试吗?
我只想要每个id的LTV的一个值,因为我想根据这个值分析许多其他列的数据。我发现每个ID行具有相同的LTV值会导致我的工作不准确,所以我希望每个ID只有一个值。
谢谢你的帮助。
您可以使用以下内容。代码通过account_id
计算组。然后,您可以计算每组的总和,并将其存储在每组的最后一个值中:
groups = df.groupby('account_id')
last_index = pd.DataFrame.last_valid_index
df.loc[groups.apply(last_index), 'LTV'] = groups['final_premium'].sum().values
输出:
account_id final_premium days_since_first_sale LTV
0 0003eDas 42.50 1 NaN
1 0003eDas 24.80 5 NaN
2 0003eDas 80.80 7 148.10
3 0215fweD 34.25 4 34.25
4 4sdfsw34 21.00 5 NaN
5 4sdfsw34 10.00 8 31.00