pandas 带系列的 Dataframe 填充

jw5wzhpr  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(175)

我正在用同一 Dataframe 中的另一列更新 Dataframe 中缺失的值。但我不明白这种行为。

0              1        2
0   NaN         0.076733    0.378676
1   NaN         0.223911    NaN
2   NaN         0.173071    0.534397
3   NaN         0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

我正在用column 0系列更新column 1column 2

df.fillna(df[1])

我希望它与标签索引对齐,但它填充的是来自序列的标量值,而不是序列本身。

0           1           2
0   0.076733    0.076733    0.378676
1   0.076733    0.223911    0.173071
2   0.076733    0.173071    0.534397
3   0.076733    0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

**编辑:**我希望它输出如下:

0           1           2
0   0.076733    0.076733    0.378676
1   0.223911    0.223911    0.223911
2   0.173071    0.173071    0.534397
3   0.991686    0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

有人能解释一下这是怎么回事吗?

重新编辑我发现了一种Pandas遵循我想做的事情的方法--为每一列传递一个字典,这看起来相当冗长。

df.fillna({0:df[1],2:df[1]})
vh0rcniy

vh0rcniy1#

指定方法和轴
这就行了

import pandas as pd
df=pd.DataFrame({0:[1,2,3,4,5,6],1:[None,None,None,None,5,6],2:[None,None,3,4,5,6]})

df.fillna(method='ffill', axis=1)
print(df)

    0   1   2
0   1.0 1.0 1.0
1   2.0 2.0 2.0
2   3.0 3.0 3.0
3   4.0 4.0 4.0
4   5.0 5.0 5.0
5   6.0 6.0 6.0

对于任意列

df[1]=np.where(df[1].isnull(),df[0],df[1])
df[2]=np.where(df[2].isnull(),df[0],df[2])
fsi0uk1n

fsi0uk1n2#

根据第一列(第0列a.k.adf[0])填写NA。

0           1           2
0   *0.895575    0.522721    0.012833
1   **0.522721    0.522721    0.012833
2   ***0.012833    0.522721    0.558843
3   0.258442    0.522721    0.772859
4   0.900045    0.026117    0.720966
5   0.913345    0.677905    0.501755
6   0.907725    0.080543    0.881279

因此,如果第一列中有NA,它将被df [0]第一行的值替换,在示例中,该值将为0.895575
对于第二列(df[1])中的NA,它使用指定列的第二行(df[0],第一列)。因此,所有NA都用0.522721填充
对于第三列(df[2])中的NA,它使用指定列的第三行(df[0],第一列)。因此,所有NA都用0.012833填充
希望这有帮助!
编辑:我怀疑geekay's solution将实现您的预期:
填充方向(方法="填充",轴= 1)

相关问题