Pandas - 填充行子集

Posted

技术标签:

【中文标题】Pandas - 填充行子集【英文标题】:Pandas - fillna with subset of rows 【发布时间】:2017-09-07 04:48:45 【问题描述】:

我正在尝试用 0 填充某些适用于特定条件的行。我正在尝试:

df.loc[:,(df.Available == True) & (df.Intensity.isnull())].Intensity = df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity.fillna(0, inplace=True)

这不起作用 bc IndexingError: Unalignable boolean Series key provided,但是当我尝试时

df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity = df.loc[(df.Available == True) & (df.Intensity.isnull())].Intensity.fillna(0, inplace=True)

注册为更新副本。我怎样才能做到这一点?谢谢!

【问题讨论】:

【参考方案1】:

IIUC:

df.query('Available == True')['Intensity'].fillna(0)

【讨论】:

你必须重新分配它。【参考方案2】:

为了便于阅读,我把它分成了几行

a = df.Available == True
b = df.Intensity.isnull()
df.loc[(a & b), 'Intensity'] = 0

但是,这也应该有效

a = df.Available == True
b = df.Intensity.isnull()
df.Intesity *= (a & b)

【讨论】:

【参考方案3】:

如果您已经在处理 Intensity 为空的行,我认为您甚至不需要 fillna

df.loc[(df.Available) & (df.Intensity.isnull()), 'Intensity'] = 0

你也可以这样做

df.loc[df.Available, 'Intensity'] = df.loc[df.Available, 'Intensity'].fillna(0)

【讨论】:

以上是关于Pandas - 填充行子集的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Pandas DataFrame 的列和行子集转换为 numpy 数组?

pandas dataframe:如何根据列的值聚合行的子集

pandas子集选取的三种方法:[].loc[].iloc[]

对 pandas 中的多层次数据进行子集化

python&pandas:列表中具有值的子集数据框[重复]

Python 中 Pandas 的快速子集化