均值的groups的pandas fillna多列

时间:2019-11-22 20:54:57

标签: python pandas

我正在尝试同时对多个列进行分组并填充多个列。我要附上一张有关数据外观以及遇到问题的代码的图片。这是我创建的示例数据,反映了该真实数据,因为它是机密的。

共有4列:名称,植物,长度和宽度。有3种不同类型的植物。最后三个中的每个都有缺失的数据。我的最终目标是创建一个模型来猜测哪些植物类型缺失。但是要做到这一点,我首先尝试将每个名称/植物组合的长度和宽度均值推算为它们的缺失值。

下面显示的是一个计算有效均值的示例,我无法将其插入以填充na值。

lengthmean = df.groupby(['name', 'plant']).length.mean()
print(lengthmean)

我得到的结果看起来像这样

name    plant  

Brian   plant 3    2.500000
        plant1     1.850000
        plant2     2.450000
Jeff    plant 3    4.100000
        plant1     2.333333
        plant2     2.100000
Justin  plant 3    2.900000
        plant1     1.900000
        plant2     2.850000
Zach    plant 3    1.750000
        plant1     2.650000
        plant2     3.300000

我还尝试一次做多列(在这种情况下,长度和宽度都可以,但是在我的真实数据中,这还不止于此)。以下是对我来说失败的代码。

df[['length','width']] = df.groupby(['name', 'plant'])['length','width']\
    .transform(lambda x: x.fillna(x.mean()))

我收到此错误'ValueError: Length mismatch: Expected axis has 32 elements, new values have 40 elements'

我将不胜感激,谢谢!

example of data

1 个答案:

答案 0 :(得分:0)

感谢您提供示例数据,确实有帮助!

该问题似乎是由于您的plant列中包含NaNs。当我在数据集上运行您的代码df[['length','width']] = df.groupby(['name', 'plant'])['length','width']\ .transform(lambda x: x.fillna(x.mean()))时,确实收到了错误消息。

当我在plant列中删除空值时,它可以正常工作:

df = df.dropna(subset=['plant'])
df_cleaned[['length','width']] = df_cleaned.groupby(['name', 'plant'])['length','width']\
    .transform(lambda x: x.fillna(x.mean()))

如果要填充/删除/添加新的植物值/等,则需要弄清楚要使用空植物列的操作。

希望有帮助!