gpt4 book ai didi

python - 在 Pandas 中,如何使用具有相似索引的另一个数据框中的值修补具有缺失值的数据框?

转载 作者:行者123 更新时间:2023-11-28 16:33:34 26 4
gpt4 key购买 nike

来自 Fill in missing row values in pandas dataframe

我有以下数据框,想填充缺失值。

mukey   hzdept_r    hzdepb_r    sandtotal_r silttotal_r
425897 0 61
425897 61 152 5.3 44.7
425911 0 30 30.1 54.9
425911 30 74 17.7 49.8
425911 74 84

我希望每个缺失值都是与该 mukey 对应的值的平均值。在这种情况下,例如第一行缺失值将是对应于 mukey==425897 的 sandtotal_r 和 silttotal_r 的平均值。 pandas fillna 似乎并没有做到这一点。有帮助吗?


虽然代码适用于该示例中的示例数据框,但它在我上传到这里的更大数据集上失败了:https://www.dropbox.com/s/w3m0jppnq74op4c/www004.csv?dl=0

import pandas as pd
df = pd.read_csv('www004.csv')
# CSV file is here: https://www.dropbox.com/s/w3m0jppnq74op4c/www004.csv?dl=0
df1 = df.set_index('mukey')
df1.fillna(df.groupby('mukey').mean(),inplace=True)
df1.reset_index()

我收到错误:InvalidIndexError。为什么它不起作用?

最佳答案

使用 combine_first . 它允许您使用基于相同索引的右侧数据框中的匹配数据修补左侧数据框中的缺失数据。

在这种情况下,df1 位于左侧,df2 表示右侧。

In [48]: df = pd.read_csv('www004.csv')
...: df1 = df.set_index('mukey')
...: df2 = df.groupby('mukey').mean()

In [49]: df1.loc[426178,:]
Out[49]:
hzdept_r hzdepb_r sandtotal_r silttotal_r claytotal_r om_r
mukey
426178 0 36 NaN NaN NaN 72.50
426178 36 66 NaN NaN NaN 72.50
426178 66 152 42.1 37.9 20 0.25

In [50]: df2.loc[426178,:]
Out[50]:
hzdept_r 34.000000
hzdepb_r 84.666667
sandtotal_r 42.100000
silttotal_r 37.900000
claytotal_r 20.000000
om_r 48.416667
Name: 426178, dtype: float64

In [51]: df3 = df1.combine_first(df2)
...: df3.loc[426178,:]
Out[51]:
hzdept_r hzdepb_r sandtotal_r silttotal_r claytotal_r om_r
mukey
426178 0 36 42.1 37.9 20 72.50
426178 36 66 42.1 37.9 20 72.50
426178 66 152 42.1 37.9 20 0.25

请注意,以下行在生成的 df3

中仍然没有值
426162
426163
426174
426174
426255

因为它们一开始就是单行,因此,.mean() 对它们没有任何意义(嗯,看到我在那里做了什么吗?)。

关于python - 在 Pandas 中,如何使用具有相似索引的另一个数据框中的值修补具有缺失值的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29359134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com