首页 > 解决方案 > 如何通过比较 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')

标签: pythonpandasdataframe

解决方案


不会向前填充做这项工作吗?

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)

推荐阅读