基于其他列的nan值更新列值



我有一个包含2列的简单函数。我想做的是检查哪个组有一个nan数,并将其更改为一个新的期望值。下面是一个代码片段:

def twod_array():
data = {"group": [-1, 0, 1, 2, 3],
'numbers': [[2], [14, 15], [16, 17], [19, 20, 21], [np.nan]],
}
df = pd.DataFrame(data=data)
new_group_number = 100
df.loc[4, "group"] = new_group_number
return df

之前:这就是数据的样子,你可以假设数字是排序的。

group       numbers
0     -1           [2]
1      0      [14, 15]
2      1      [16, 17]
3      2  [19, 20, 21]
4      3         [nan]

在我的例子中,我知道nan在哪里,因为它在4号位置,我可以使用loc将其更改为100,就像这样:

group       numbers
0     -1           [2]
1      0      [14, 15]
2      1      [16, 17]
3      2  [19, 20, 21]
4    100         [nan]

如果我不知道奶奶在哪里呢?我如何知道要更新哪个组?我脑海中浮现的都是嵌套的循环,我宁愿避免。。。这里有什么建议吗?

您可以替换

df.loc[4, "group"] = new_group_number

带有

idx = df.numbers.apply(lambda l: any(pd.isna(e) for e in l))
df.loc[idx, 'group'] = new_group_number

如果np.nan可能发生多次,则可以使用:

df.loc[df['numbers'].apply(pd.isna).apply(any), 'group'] = 100

df.loc[df['numbers'].apply(lambda x: pd.isna(x).any()), 'group'] = 100

或者,如果你认为只有一个np.nan,那么你可以使用.isin:

df.loc[df['numbers'].isin([[np.nan]]), 'group'] = 100

最新更新