python - pandas:在(多索引)DataFrame上使用每个组中最常见的值执行 fillna() 的最佳方法是什么?

标签 python pandas dataframe fill missing-data

有一个包含一些 NaN 值的 DataFrame:

df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 2, 2], 'B': [1, 1, np.NaN, 2, 3, np.NaN, 3, 4]})

   A    B
0  1  1.0
1  1  1.0
2  1  NaN <-
3  1  2.0
4  2  3.0
5  2  NaN <-
6  2  3.0
7  2  4.0

将标签“A”设置为索引:

df.set_index(['A'], inplace=True)

现在有两个组,索引分别为 1 和 2:

     B
A     
1  1.0
1  1.0
1  NaN <-
1  2.0
2  3.0
2  NaN <-
2  3.0
2  4.0

使用每组中最频繁值对 DataFrame 执行 fillna() 的最佳方法是什么?

所以,我想做这样的调用:

df.B.fillna(df.groupby('A').B...)

并得到:

     B
A     
1  1.0
1  1.0
1  1.0 <-
1  2.0
2  3.0
2  3.0 <-
2  3.0
2  4.0

我希望有一种方法,它也适用于多索引。

最佳答案

  • 按列 A 分组,并将 fillna() 应用于每个组内的 B;
  • 从系列中删除缺失值,然后执行 value_counts,使用 idxmax() 选取最常见的值;

假设不存在缺少所有值的组:

df['B'] = df.groupby('A')['B'].transform(lambda x: x.fillna(x.dropna().value_counts().idxmax()))
df

enter image description here

关于python - pandas:在(多索引)DataFrame上使用每个组中最常见的值执行 fillna() 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41688695/

相关文章:

python - 比较 pandas 数据帧,从其他数据帧捕获数据

python - WebDriver异常 : Message: newSession with GeckoDriver Firefox v65 and Selenium through Python 3. 7

python - PyTorch 逐元素过滤层

python - 如果另一列是 NaN,如何替换列中的值?

python - python pandas 稀疏数据帧是否丢失多索引列名称或者我做错了?

python - 如何将 Pandas 中的重复编号列转换为单个非编号列?

python - 使用另一列的值获取某一列的值

Python TKinter 获取文本小部件中的点击标签

其他语言的 Python 月/日名称

pandas - 按照以下唯一方式对行进行排序(列的值可以在同一行内互换,以对行进行排序)