python - 如何通过比较 Pandas 中另一列的值来填充列中的值
问题描述
数据框包含一些列。“模型”列包含一些相同的值,但“功率”列未满。如何通过另一行的相同“模型”填充“功率”中的所有 NaN 值?
display(df)
model power ...
0 A 100 ...
1 B 200 ...
2 A NaN ...
3 C 300 ...
4 B NaN ...
预期的结果是这样的:
model power ...
0 A 100 ...
1 B 200 ...
2 A 100 ...
3 C 300 ...
4 B 200 ...
我创建了新的数据框“models_with_power”,其中包含具有填充“power”的独特“model”。但我不知道下一步该怎么做:
temp_df = df[df['power'].isnull() == False]
models_with_power = pd.DataFrame({'model':temp_df['model'].unique()})
models_with_power = models_with_power.merge(temp_df, on='name', how='right')
解决方案
不会向前填充做这项工作吗?
dataf['power'] = dataf.groupby('model')['power'].transform(lambda d: d.ffill())
或者更简单的@Mustafa Aydın
# credit to
dataf["power"] = dataf.groupby("model").power.ffill()
完整的工作代码:向前和向后填充
import numpy as np
import pandas as pd
dataf = pd.DataFrame(
{
'model':list('ABACB'),
'power':[100, 200, np.nan, 300, np.nan]
})
# first fill foward with previous value of the same group
# then fill backwards
dataf['power'] = dataf.groupby('model')['power'].transform(lambda d: d.ffill().bfill())
print(dataf)
推荐阅读
- kotlin - 在 Kotlin 中使用扩展函数来缓存协程
- asp.net - Foreach 循环中 BeginForm() 的 ASP.NET MVC 路由问题
- firebase - 使用颤振进行管理员访问 - 基于用户权限火力库隐藏和显示小部件和按钮
- javascript - 如何根据使用状态创建的状态显示过滤列表?
- sh - sh 文件中的猫不回显空行
- powershell - 来自 IF 语句内函数内的 Tee-Object 命令的 PowerShell 控制台输出
- python-3.x - 除了 bcrypt 之外,您会推荐我在 Python3 中使用哪些可以生成随机盐的散列算法?
- webview - GTK 窗口上的 Chromium 内容模块(内容外壳)Webview
- javascript - 按年份过滤 json 数据
- c++ - 如何在多维 R 数组上加速 Log-sum-exp 函数?