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