在熊猫数据框中按计数分组

达文1

在熊猫数据框中,我想创建两个新列来计算相同值的出现次数和第三列来计算比率

比率 = count_occurrence_both_columns /count_occurrence_columnA *100

df = pd.DataFrame({"column A": ["Atlanta", "Atlanta", "New York", "New York","New York"], "column B": ["AT", "AT" , "NY", "NY", "AT"]}) df

柱子 B列 出现_columnA 出现_both_columns 比率
亚特兰大 2 2 100%
亚特兰大 2 2 100%
纽约 新的 3 2 66.66%
纽约 新的 3 2 66.66%
纽约 3 1 33.33%
莱昂纳多·卡尔德隆

首先,您可以创建一个字典,将键作为 A 列的唯一值,将值作为计数。

>>> column_a_mapping = df['column A'].value_counts().to_dict()
>>> column_a_mapping
>>> {'New York': 3, 'Atlanta': 2}

然后,您可以创建一个将两列合并的新列,以便具有与上述相同的值计数字典。

>>> df['both_columns'] = (
        df[['column A', 'column B']]
        .apply(lambda row: '_'.join(row), axis=1)
    )

>>> both_columns_mapping = df['both_columns'].value_counts().to_dict()
>>> both_columns_mapping
>>> {'New York_NY': 2, 'Atlanta_AT': 2, 'New York_AT': 1}

一旦您拥有唯一值计数,您就可以简单地使用该replace pd.Series方法。

>>> df['count_occurrence_both_columns'] = df['both_columns'].replace(both_columns_mapping)
>>> df['count_occurrence_columnA'] = df['column A'].replace(column_a_mapping)

最后,您可以删除合并了两列的列,然后使用以下命令创建比率列:

>>> df['ratio'] = df['count_occurrence_both_columns'] / df['count_occurrence_columnA'] * 100
>>> df.drop('both_columns', axis=1, inplace=True)

您应该获得此数据框:

A列 B栏 count_occurrence_columnA count_occurrence_both_columns 比率
亚特兰大 2 2 100.000000
亚特兰大 2 2 100.000000
纽约 新的 3 2 66.666667
纽约 新的 3 2 66.666667
纽约 3 1 33.333333

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章