熊猫与groupby的两列划分

桑耶夫

这显然很简单,但是作为熊猫新手,我陷入了困境。

我有一个CSV文件,其中包含3列,即州,bene_1_count和bene_2_count。

我想计算给定状态下“ bene_1_count”和“ bene_2_count”的比率。

df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
           'bene_1_count': [np.random.randint(10000, 99999)
                     for _ in range(12)],
           'bene_2_count': [np.random.randint(10000, 99999)
                     for _ in range(12)]})

我正在尝试以下操作,但它给我一个错误:“没有可串联的对象”

df['ratio'] = df.groupby(['state']).agg(df['bene_1_count']/df['bene_2_count'])

我无法弄清楚如何“达到” groupby的状态级别以获取列的比率。

我想要一个状态的列比,就像我想要的输出如下:

    State       ratio

    CA  
    WA  
    CO  
    AZ  
安森

或者,声明:您可以创建接受数据框的自定义函数。groupby将返回子数据帧。然后,您可以使用apply函数将自定义函数应用于每个子数据帧。

df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
           'bene_1_count': [np.random.randint(10000, 99999)
                     for _ in range(12)],
           'bene_2_count': [np.random.randint(10000, 99999)
                     for _ in range(12)]})

def divide_two_cols(df_sub):
    return df_sub['bene_1_count'].sum() / float(df_sub['bene_2_count'].sum())

df.groupby('state').apply(divide_two_cols)

现在说您希望将每一行除以每个组的总和(例如AZ的总和),并保留所有原始列。只需调整以上功能(更改计算并返回整个子数据框)即可:

def divide_two_cols(df_sub):
    df_sub['divs'] = df_sub['bene_1_count'] / float(df_sub['bene_2_count'].sum())
    return df_sub

df.groupby('state').apply(divide_two_cols)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章