如何使用pandas计算DataFrame中角色属性稀有度并找出最稀有角色
实现步骤
- 第一步:预处理数据(可选,避免属性值因为格式问题统计错误):统一去除所有字符串属性前后的空格、多余的标点符号
- 第二步:按列统计每个属性值的出现频次,计算每个属性值对应的稀有度百分比:
稀有度 = (总数据量 - 该属性出现次数) / 总数据量 * 100,出现次数越少,稀有度数值越高 - 第三步:对每一行,将该行所有属性对应的稀有度百分比求平均值,作为该行角色的整体稀有度存入新列
- 第四步:按稀有度列降序排序,第一条就是最稀有的角色
代码实现
首先导入依赖,示例数据可替换为你自己的数据集读取逻辑:
import pandas as pd # 示例数据读取部分,实际使用时替换为你自己的读csv/excel代码即可 data = { 'outfit': ['cyberpunk.', 'formal.', 'police.'], 'face': ['angry.', 'smile', 'smile.'], 'hat': ['none.', 'cowboy hat.', 'cop.'], 'skin': ['purple.', 'normal.', 'dark.'], 'background': ['black.', 'pink.', 'white.'], 'weapon': ['sword', 'pistol', 'pepper spray'] } df = pd.DataFrame(data) n = len(df) # 获取总数据量 # 【可选预处理】统一去除所有字符串前后空格、末尾的英文句号,避免相同属性因为格式差异被统计为不同值 for col in df.columns: df[col] = df[col].str.strip().str.rstrip('.') # 预计算每列所有属性值对应的稀有度映射表 col_rarity_map = {} for col in df.columns: val_cnt = df[col].value_counts() col_rarity_map[col] = val_cnt.apply(lambda cnt: (n - cnt)/n * 100).to_dict() # 计算每行的平均稀有度,存入新列 df['稀有度百分比'] = df.apply( lambda row: sum(col_rarity_map[col][row[col]] for col in df.columns) / len(df.columns), axis=1 ) # 提取最稀有角色(按稀有度降序排序的第一条) rarest_char = df.sort_values('稀有度百分比', ascending=False).head(1) print("最稀有角色信息:") print(rarest_char)
补充说明
- 新列
稀有度百分比数值范围为0-100,数值越高代表角色越稀有 - 如需保留指定小数位,可在计算平均稀有度时用
round函数指定精度即可
内容的提问来源于stack exchange,提问作者Zac
相关产品推荐
相关产品推荐

