在Python中丢失按列分组
在其中一个数据帧中,我使用基于group by的其他值的平均值填充空值 假设我的数据帧是这样的在Python中丢失按列分组,python,dataframe,pandas-groupby,fillna,Python,Dataframe,Pandas Groupby,Fillna,在其中一个数据帧中,我使用基于group by的其他值的平均值填充空值 假设我的数据帧是这样的 Month Dayname Class Val1 Val2 Sep Mon A 1 2 Sep Mon B 3 4 Sep Tue A 7 5 Oct Mon F 5 2 Oct Fri K 2 8 Oct Fri
Month Dayname Class Val1 Val2
Sep Mon A 1 2
Sep Mon B 3 4
Sep Tue A 7 5
Oct Mon F 5 2
Oct Fri K 2 8
Oct Fri F 7 3
Sep Mon A NaN NaN
Sep Mon B NaN NaN
Oct Fri F NaN NaN
当我使用此代码时,它会正确更新NAN
df = df.groupby(['Month','Dayname']).transform(lambda x: x.fillna(x.mean()))
但它会按列Month&Dayname
最终结果将是这样的
Class Val1 Val2
A 1 2
B 3 4
A 7 5
F 5 2
K 2 8
F 7 3
A 2 3
B 2 3
F 4.5 5.5
我如何通过保持按列分组来完成这一行尝试以下操作:
df=df.groupby(['Month','Dayname')).apply(lambda x:x.fillna(x.mean()).reset_index(drop=True)
对我来说唯一的区别是它排序。@LuckyZakary thx,看起来它正在工作,我将进一步测试它,只需将结果分配给现有的列df[['Val1','Val2']]=df.groupby(['Month','Dayname']).transform(lambda x:x.fillna(x.mean())
@MichaelGardner列名是动态的,可能会根据数据而变化为什么需要转换而不是使用对列进行操作的apply函数df.groupby(['Month','Day']).apply(lambda x:x.fillna(x.mean()),axis=0)
试试这个:df=df.groupby(['Month','Dayname']).apply(lambda x:x.fillna(x.mean()).reset_index(drop=True)
对我来说唯一的区别是它排序了。@luckyzakizakary-thx,看起来它正在工作,我将测试它,只需将结果分配给现有列df[['Val1','Val2']]=df.groupby(['Month','Dayname']).transform(lambda x:x.fillna(x.mean())
@MichaelGardner列名是动态的,可能会根据数据而变化为什么需要转换而不是使用对列进行操作的apply函数<代码>df.groupby(['Month','Day'])。应用(lambda x:x.fillna(x.mean()),axis=0)