![](/img/trans.png)
[英]Fill missing year and week values dynamically based on series in Python pandas
[英]fill multiple missing values with series based on index values
pandas在列的基础上处理这个没有问题。 假设我们有不同的s
s = pd.Series([10, 20, 30], ['x', 'y', 'z'])
然后我们可以
df.fillna(s)
x y z
a 10.0 1.0 30.0
b 2.0 20.0 30.0
c 10.0 20.0 3.0
但那不是你想要的。 用你的s
s = pd.Series([10, 20, 30], ['a', 'b', 'c'])
然后df.fillna(s)
什么都不做。 但是我们知道它适用于列,所以:
df.T.fillna(s).T
x y z
a 10.0 1.0 10.0
b 2.0 20.0 20.0
c 30.0 30.0 3.0
这是一种NumPy方法 -
mask = np.isnan(df.values)
df.values[mask] = s[s.index.searchsorted(df.index)].repeat(mask.sum(1))
样品运行 -
In [143]: df
Out[143]:
x y z
a NaN 1.0 NaN
b 2.0 NaN NaN
d 4.0 NaN 7.0
c NaN NaN 3.0
In [144]: s
Out[144]:
a 10
b 20
c 30
d 40
e 50
dtype: int64
In [145]: mask = np.isnan(df.values)
...: df.values[mask] = s[s.index.searchsorted(df.index)].repeat(mask.sum(1))
...:
In [146]: df
Out[146]:
x y z
a 10.0 1.0 10.0
b 2.0 20.0 20.0
d 4.0 40.0 7.0
c 30.0 30.0 3.0
请注意,如果s
的索引值未排序,我们需要使用带有searchsorted
额外参数sorter
。
其他方式:
def fillnull(col):
col[col.isnull()] = s[col.isnull()]
return col
df.apply(fillnull)
请注意,它的效率低于@Brian的方式(每个循环9ms,而我的计算机每循环1.5ms)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.