【问题标题】:Replace NaN values of pandas.DataFrame based on values of other columns (according to formula)根据其他列的值替换pandas.DataFrame的NaN值(根据公式)
【发布时间】:2021-10-28 06:26:21
【问题描述】:

演示数据框:

import pandas as pd
df = pd.DataFrame({'a': [1,None,3], 'b': [5,10,15]})

我想将a中的所有NaN值替换为b**2中的对应值,并将b设为NaN(移动NaN值并对它们进行一些操作)。

想要的结果:

1   5
100  NaN
3   15

熊猫怎么可能?

【问题讨论】:

  • shift NaN values and make some operations on them 是什么意思?第一部分只是fillna 不是吗? df['a'] = df['a'].fillna(df['b'] ** 2)

标签: pandas dataframe nan


【解决方案1】:

您可以使用df['a'].isnull() 获取要更改的行。然后您可以使用它来更新带有loc 的列。

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [1, None, 3], 'b': [5, 10, 15]})

change = df['a'].isnull()
df.loc[change, ['a', 'b']] = [df.loc[change, 'b']**2, np.NaN]

print(df)

注意change 变量只是为了避免在赋值两边重复df['a'].isnull()。您可以将其替换为该表达式以在一行中执行此操作,但我认为这看起来很混乱。

结果:

       a     b
0    1.0   5.0
1  100.0   NaN
2    3.0  15.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2021-02-20
    • 2022-08-18
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    相关资源
    最近更新 更多