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')
答案 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)