Pandas使用NumPy数组填充fillna值

4

我有一个数据框,如下所示,它有其他列,但这一列很重要:

df = pd.DataFrame({'A': ['foo','bar','baz','foo','bar','bar','baz','foo']})

我正在尝试创建另一列,然后将与列 A 匹配的数组值添加到新列中。

新列:df['B'] = np.nan

数组:arr = np.array([5,3,9])

尝试

我想将数组分配给列 A 中的所有 foo

df['B'] = np.where(df['A']=='foo',arr,np.nan) # ValueError: operands could not be 
                                              # broadcast together with shapes 
                                              # (8,) (3,) () 

我也尝试了以下方法:

df['B'][df['A']=='foo'].values = arr # AttributeError: can't set attribute

最后,
df['B'] = df['B'][df['A']=='foo'].map(arr) # TypeError: 'numpy.ndarray' object is not callable

期望的输出结果

     A   B
0  foo   5
1  bar NaN
2  baz NaN
3  foo   3
4  bar NaN
5  bar NaN
6  baz NaN
7  foo   9
1个回答

3
如果你确定arr的长度与'foo'出现的次数相同,你可以使用以下代码设置值:
df.loc[df['A'] == 'foo', 'B'] = arr

这有点像 df['B'][df['A']=='foo'] = arr(接近你尝试的方法之一),但避免了链式赋值(这可能会导致值未被正确或完全设置)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接