我有一个 df
多列。
df = pd.DataFrame({'Store':['M1','M2','M3','M1','M1','M2','M2','M3','M3'],
'Category':['A','A','A','B','B','B','C','C','C'],
'Price_Category':[np.nan,X,np.nan,np.nan,Y,Y,Z,np.nan,Z]})
我如何填写NaN
在 Price_Category
与模式,仅基于Category
?我尝试使用:
df['Price_Category'] = df.groupby('Category')['Price_Category'].apply(lambda x: x.fillna(x.mode()[0]))
但我收到此错误:KeyError: 0
我试过的其他方法,开始填NaN
名称来自 Store
.谢谢你的帮助!
最佳答案
使用 Series.iat
对于 Series
的第一个值按职位:
f = lambda x: x.fillna(x.mode().iat[0])
df['Price_Category'] = df.groupby('Category')['Price_Category'].apply(f)
print (df)
Store Category Price_Category
0 M1 A X
1 M2 A X
2 M3 A X
3 M1 B Y
4 M1 B Y
5 M2 B Y
6 M2 C Z
7 M3 C Z
8 M3 C Z
如果错误:IndexError: index 0 is out of bounds for axis 0 with size 0
这意味着只有 NaN 一组或多组(已更改数据以引发错误):
df = pd.DataFrame({'Store':['M1','M2','M3','M1','M1','M2','M2','M3','M3'],
'Category':['A','A','A','B','B','B','C','C','C'],
'Price_Category':[np.nan,'X',np.nan,np.nan,'Y','Y',np.nan,np.nan,np.nan]})
#test if at least one non NaN else return same values (NaNs)
f = lambda x: x.fillna(x.mode().iat[0]) if x.notna().any() else x
df['Price_Category'] = df.groupby('Category')['Price_Category'].apply(f)
print (df)
Store Category Price_Category
0 M1 A X
1 M2 A X
2 M3 A X
3 M1 B Y
4 M1 B Y
5 M2 B Y
6 M2 C NaN
7 M3 C NaN
8 M3 C NaN
关于python - Pandas:用组的模式填充 na,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67985433/