数据帧列按id值求和,每个id返回一个值



我有一个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

最新更新