假设我有这样一个 Dataframe :
| 颜色|动物|
| - ------|- ------|
| 黄色|猫|
| 黄色|猫|
| 红色|猫|
| 红色|猫|
| 蓝色|猫|
我想为每列创建一列,显示每个值出现的频率:
| 颜色|颜色_频率|动物|动物_频率|
| - ------|- ------|- ------|- ------|
| 黄色|百分之四十|猫|百分之百|
| 黄色|百分之四十|猫|百分之百|
| 红色|百分之四十|猫|百分之百|
| 红色|百分之四十|猫|百分之百|
| 蓝色|百分之二十|猫|百分之百|
我试过了
frequency = list()
for column in df.columns:
series = (df[column].value_counts(normalize=True, dropna=True)*100)
overview.append(series)
#overview list
o_colors = overview[0]
o_animals = overview[1]
df['animals_frequency'] = o_animals
如果我尝试
df.info()
它返回
| 色谱柱|非空|计数|D型|
| - ------|- ------|- ------|- ------|
| 动物_频率|无|非零|浮动64|
2条答案
按热度按时间sqxo8psd1#
一种简单的方法是计算每个列值的相对频率,然后将这些频率连接回原始DataFrame。
quhf5bfb2#
对于每列,计算每个不同元素的频率,然后使用
replace
将每个元素Map到相应的频率