Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中丢失按列分组_Python_Dataframe_Pandas Groupby_Fillna - Fatal编程技术网

在Python中丢失按列分组

在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

在其中一个数据帧中,我使用基于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      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)