在熊猫数据框中,我想创建两个新列来计算相同值的出现次数和第三列来计算比率
比率 = 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] 删除。
我来说两句