python-3.x - 基于某些条件的平均插补
问题描述
我有以下数据框,
Category Value
A 100
A -
B -
C 50
D 200
D 400
D -
如您所见,有些值带有连字符“-”。我想用相应类别的手段替换那些连字符。
在示例中,“A”有两个条目 - 一行的值为 100,另一行带有连字符。所以平均值本身就是 100。对于 B,由于没有有效值,平均值将是整个列的平均值,即 (100+50+200+400/4 = 187.5)。对于 C,没有更改,对于 D,连字符将替换为 300(与“A”的逻辑相同)。
输出:
Category Value
A 100
A 100
B 187.5
C 50
D 200
D 400
D 300
解决方案
尝试:
df = df.replace("-", np.nan)
df["Value"] = pd.to_numeric(df["Value"])
avg = df["Value"].mean()
df["Value"] = df["Value"].fillna(
df.groupby("Category")["Value"].transform(
lambda x: avg if x.isna().all() else x.mean()
)
)
print(df)
印刷:
Category Value
0 A 100.0
1 A 100.0
2 B 187.5
3 C 50.0
4 D 200.0
5 D 400.0
6 D 300.0
推荐阅读
- c# - 尽管重新安装了 Erlang 和 RabbitMQ,但 RabbitMQ 队列没有被删除
- wordpress - WordPress - 如何在不破坏任何其他查询的情况下仅将 tax_query 添加到自定义帖子类型
- android - 限制在 ConstraintLayout 之外的视图不接收触摸事件
- php - optgroup 中选项的 PHP 分组
- mysql - 如何使用 JOIN 和 BETWEEN where 子句加速 MYSQL 查询?
- thymeleaf - 如何将变量传递给 session.attribute.contains() thymeleaf?
- python - How to get the number of values from a database field for the last 10 days
- python - 卷积神经网络(CNN)python
- sql-server - 如何限制在 SQL Server 中的表中插入特定行数
- c# - 如果计数等于 0,如何使这个 Android044 = g.Count(i => i.Android044 == 1) 返回 null?