如何根据 Pandas 数据框中的其他列填充缺失值?

数据挖掘 熊猫
2021-10-09 22:04:19

假设我有一个 5*3 数据框,其中第三列包含缺失值

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

我希望为第一个产品第二列的基于缺失值的规则生成价值

1 2 3
4 5 20 <--4*5
7 8 9
3 2 6 <-- 3*2
5 6 30 <-- 5*6

我该如何使用数据框?谢谢。

如何添加条件来计算这样的缺失值?

if 1st % 2 == 0 then 3rd = 1st * 2nd else 3rd = 1st + 2nd

1 2 3
4 5 20 <-- 4*5 because 4%2==0
7 8 9
3 2 5 <-- 3+2 because 3%2==1
5 6 11 <-- 5+6 because 5%2==1
4个回答

假设您的数据框的三列是a,bc. 这就是你想要的:

df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

完整代码:

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, np.nan], [7, 8, 9], [3, 2, np.nan], [5, 6, np.nan]]), 
    columns=['a', 'b', 'c']
)
df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

使用数据框的fillna()方法怎么样?

df['C'].fillna(df.A * df.B)

另外一个选择:

df.loc[(pd.isnull(df.C)), 'C'] = df.A * df.B

假设您的数据框中的三列是a,bc然后您可以像这样执行所需的操作:

values = df['a'] * df['b']
df['c'] = values.where(df['c'] == np.nan, others=df['c'])