首页 > 解决方案 > 计算 Pandas DataFrame 列中字符串中某个位置的字符频率

问题描述

我有一个与该df['columnA'].value_counts()方法相关的问题和之前的帖子:Count frequency of values in pandas DataFrame column

以这个示例数据框为例:

fake_data = {'columnA': ['XAVY', 'XAVY', 'XAVY', 'XAVY', 'XAVY', 'AXYV', 'AXYV', 'AXYV', 'AXYV', 'AXYV', 'AXYV']}
df = pd.DataFrame(fake_data, columns = ['columnA'])
df

我正在尝试确定此列中字符串中每个位置的每个字母(X、A、V、Y)的频率。

在此示例中,位置 0 将是 54% A、46% X,位置 3 将是 46% Y、54% V......等等。

标签: pythonpandas

解决方案


首先将字符串转换为列表,然后展开为列。然后计算值并计算每个字母的出现百分比。

(
    df.columnA.apply(list)
    .apply(pd.Series)
    .apply(pd.value_counts)
    .apply(lambda x: x.div(x.sum()))
    .fillna(0)
)

    0           1           2           3
A   0.545455    0.454545    0.000000    0.000000
V   0.000000    0.000000    0.454545    0.545455
X   0.454545    0.545455    0.000000    0.000000
Y   0.000000    0.000000    0.545455    0.454545

推荐阅读