有没有办法用数据框中的平均值替换范围数据(例如18-25)?

Posted

技术标签:

【中文标题】有没有办法用数据框中的平均值替换范围数据(例如18-25)?【英文标题】:Is there way to replace ranged data (eg 18-25) by its mean in a dataframe? 【发布时间】:2018-01-08 09:41:31 【问题描述】:

我有一个数据集black friday. Here 是它的样子。 Age 的范围为 1-17,18-25 等。我想用它们的平均值替换所有这些范围。我可以遍历 Age 列的每个元素并解析它们并平均替换字符串值。那可能效率低下。 所以我想知道有没有更短的方法可以做到这一点?或者有没有其他方法来处理数据范围? (当然是在python中)

【问题讨论】:

欢迎来到 ***。请花时间阅读how to provide a great pandas example 上的这篇文章以及如何提供minimal, complete, and verifiable example 并相应地修改您的问题。 how to ask a good question 上的这些提示也可能有用。 @jezrael ,这种问题应该迁移或转移到这里Cross Validated 以获得有效的反馈。否则最好关闭/删除而不是像我们不一样累积的反对票这里有专业人士 【参考方案1】:

有几种方法可以转换此变量。在我看到的图片中,不仅有 bin,而且还有 value '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+),如果是,则返回不包含“+”的值。否则,bin 将被拆分为两个值,将它们转换为整数并计算它们的平均值。

2) 使用字典进行转换:

mapping = '1-17': 9, '18-25': 21.5, '55+': 55
df['age'].apply(lambda x: mapping[x])

您需要将所有值添加到映射字典(手动或自动计算它们)。然后将此转换应用于系列。

【讨论】:

以上是关于有没有办法用数据框中的平均值替换范围数据(例如18-25)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中捕获连字符分隔数字的平均值?

用相关列的平均值替换数据框中的 NaN 值的函数

通过 Pandas 中的函数替换 NaN 时索引超出范围

用 R 中的平均值、中位数、范围和数量进行总结

计算 Pandas 数据框中的平均真实范围列 [重复]

如何用熊猫数据框中的范围替换列值