如何通过 Pandas 中另一列的比较值填充列中的值

时间:2021-05-02 11:05:40

标签: python pandas dataframe

Dataframe 包含一些列。列“模型”包含一些相同的值,但列“功率”未满。如何使用另一行的相同“模型”填充“幂”中的所有 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')

1 个答案:

答案 0 :(得分:1)

前向填充不能完成这项工作吗?

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)