首页 > 解决方案 > 为 DataFrame 中的每个变量 x 计算一个变量 y 并添加相对频率

问题描述

我有:

df = pd.DataFrame({"A": [[55218],[55218],[55218],[55222]], "B": [[0],[0],[2],[1]]})

我想在“A”中为 55218 每隔 0、1 或 2 计数一次,并返回相对频率

我的预期输出是:

df_new = pd.DataFrame({"A": [[55218],[55218],[55218],[55222]],"B": [[0], [0], [2], [1]],"Count": [[2], [2], [1], [1]], "rel_frequ": [[0.67], [0.67], [0.33], [1]] })

标签: pythonpandasdataframecount

解决方案


使用DataFrame.transform,然后将列除以AbySeries.value_counts和的映射频率Series.map

df['Count'] = df.groupby(['A','B'])['A'].transform('size')
df['rel_frequ'] = df['Count'].div(df['A'].map(df['A'].value_counts()))
print (df)
       A  B  Count  rel_frequ
0  55218  0      2   0.666667
1  55218  0      2   0.666667
2  55218  2      1   0.333333
3  55222  1      1   1.000000

推荐阅读