首页 > 解决方案 > 如何在 pandas 的数据框中划分值?

问题描述

所以我有一个原始数据集: original_data_set

我从 csv 文件中读取,然后根据字段分开:

像这样,loan_df = re_df.loc[re_df.field == 'loan_amount'] home_df = re_df.loc[re_df.field == 'home_value']

产生 贷款 home_vals

我想在两个数据帧的值字段上进行划分,但是当我尝试时ltv_df = loan_df['value']/home_df['value'] ,我得到了一系列 NaN 值。

有没有人有什么建议?

标签: pandasdivision

解决方案


两种选择:

如果只是values需要的 numpy 除法工作:

ltv_df = loan_df['value'].values / home_df['value'].values
[0.57238284 1.30293486]

或者,如果需要使用 DataFrame set_index,则除以reset_index返回 DataFrame:

ltv_df = (
        loan_df.set_index('loan_id')['value'] /
        home_df.set_index('loan_id')['value']
).reset_index(name='result')
   loan_id    result
0        1  0.572383
1        2  1.302935

或者,可以通过apply和直接从初始 DataFrame 获取值np.divide

ltv_df = (
    re_df.groupby('loan_id')['value'].apply(lambda x: np.divide(*x))
        .reset_index(name='result')
)
   loan_id    result
0        1  0.572383
1        2  1.302935

数据框设置:

import numpy as np
import pandas as pd

re_df = pd.DataFrame({'loan_id': [1, 1, 2, 2],
                      'field': ['loan_amount', 'home_value'] * 2,
                      'value': [65037, 113625, 84395, 64773]})

loan_df = re_df.loc[re_df.field == 'loan_amount']
home_df = re_df.loc[re_df.field == 'home_value']

推荐阅读