有没有办法用数据框中的平均值来代替远程数据(例如18-25)?
问题描述:
我有一个数据集black friday。 Here是它的样子。
年龄在1-17,18-25等范围内给出。我想用它们的平均值代替所有这些范围。我可以遍历年龄段列的每个元素并解析它们并用平均值替换字符串值。这可能是低效的。
所以我想知道有没有更简单的方法来做到这一点?或者是否有其他方法来处理数据范围? (在python of course中)有没有办法用数据框中的平均值来代替远程数据(例如18-25)?
答
有几种方法可以转换这个变量。在我看到的图片中,不仅有箱子,还有值'55 +',所以需要考虑。
1)一个衬垫:
df['age'].apply(lambda x: np.mean([int(x.split('-')[0]), int(x.split('-')[1])]) if '+' not in x else x[:-1])
它检查该值是否包含 '+'(如55岁以上),如果是比没有 '+' 被返回的值。否则,箱被分成两个值,它们被转换为整数并且它们的平均值被计算。
2)使用字典转型:
mapping = {'1-17': 9, '18-25': 21.5, '55+': 55}
df['age'].apply(lambda x: mapping[x])
你需要的所有值添加到字典映射(手动或自动计算它们)。然后你将这个转换应用到系列中。
欢迎来到StackOverflow。请花时间阅读这篇文章[如何提供一个伟大的熊猫示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)以及如何提供[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)并相应地修改您的问题。 [如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)上的这些技巧也可能有用。 – jezrael
@jezrael,这种问题应该被迁移或转移到[交叉验证](https://stats.stackexchange.com/)以获得有效的反馈。否则,最好关闭/删除而不是累积下来的投票就好像我们这里没有专业人员一样 – quintumnia