Python 熊猫用列值填充NaN

Python 熊猫用列值填充NaN,python,pandas,Python,Pandas,给定以下数据帧: import pandas as pd import numpy as np df = pd.DataFrame({'A':[1,1,np.nan], 'B':[2.2,np.nan,2.2]}) df A B 0 1.0 2.2 1 1.0 NaN 2 NaN 2.2 如果我想将A列中的NaN值替换为该列(1)中重复的值,并对B列执行相同的操作,那么我需要使

给定以下数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[1,1,np.nan],
                   'B':[2.2,np.nan,2.2]})           
df

    A       B
0   1.0     2.2
1   1.0     NaN
2   NaN     2.2
如果我想将A列中的NaN值替换为该列(1)中重复的值,并对B列执行相同的操作,那么我需要使用哪种类型的fillna()

    A       B
0   1.0     2.2
1   1.0     NaN
2   NaN     2.2
寻找一个通用的解决方案,因为我真的有数千行。
提前谢谢

fillna
可以使用值字典,其中键是列名

假设要使用重复次数最多的值填充列,则可以使用以下值计算字典:

df = pd.DataFrame({
    'A': [1, 1, np.nan, 2], 
    'B': [2.2, np.nan, 2.2, 1.9]
})
fill_dict = df.mode().to_dict(orient='records')[0]
df = df.fillna(values=fill_dict)
df

   A    B
0  1  2.2
1  1  2.2
2  1  2.2
3  2  1.9
然后再加上

df['A'].fillna(most_common(df['A'].values.tolist()))
为什么不简单地:

df.fillna(method='ffill')

# df = pd.DataFrame({'A': [1, 1, np.nan, 2], 'B': [2.2, np.nan, 2.2, 1.9]})
# df.fillna(method='ffill')
#   A    B
#0  1  2.2
#1  1  2.2
#2  1  2.2
#3  2  1.9

我对您使用itertools实现的
模式
印象深刻。但即使我们暂时忘记熊猫数据帧有自己的
模式
方法,使用numpy的模式函数肯定会更可靠。是的,我同意。。。我只是忘记了模式,所以我做了这个。。。不知道它是否正确!!!!从OP中不清楚填充值应该是上一个值,还是列中最常见的值。嗯,我把它理解为上一个值,但你可能是对的。从我的示例中,这是我一直在寻找的简单答案。但是,如果我想用最常见的值填充,该怎么办?我最终试图填补df.loc和groupby转换过程产生的空白,该过程会留下一些行值空白。我将在一分钟后发布另一个相关问题,更好地总结我要做的事情。首先转置,然后是
ffil
bfill
df.T.ffill().bfill().T
df.fillna(method='ffill')

# df = pd.DataFrame({'A': [1, 1, np.nan, 2], 'B': [2.2, np.nan, 2.2, 1.9]})
# df.fillna(method='ffill')
#   A    B
#0  1  2.2
#1  1  2.2
#2  1  2.2
#3  2  1.9