2

我正在尝试在我的数据框中填写缺失值。但是我想用 groupby 语句填充缺失的列。所以这就是我的数据框的样子......

Number    Other
1435       NaN
1435       NaN
1435       COOL
1817       NaN
1817       YES

所以我想要做的基本上就是取最大值或最后一个有数据的值,然后用那个值填充那个特定数字的 na .....所以例如 1435 我想把它分组编号,然后在该列中查找 max() 以便它会找到 COOL 然后用 COOL 填充另一列中的所有 NaN 我最终的数据框看起来像这样

Number    Other
1435       COOL
1435       COOL
1435       COOL
1817       YES
1817       YES

到目前为止我所尝试的。

df["Number"] = df["Number"].fillna(value=df.groupby(['Number'])["Other"].max())

df["Number"] = df["Number"].fillna(value=df.groupby(['Number'])["Other"].last())

我认为我需要做的可能是对它们进行排序,然后使用 last 来获取值,但我似乎无法弄清楚如何做到这一点并返回我正在寻找的结果。任何帮助将不胜感激谢谢。

4

3 回答 3

3

看起来你想要的只是groupby+ bfill

df['Other'] = df.groupby('Number').Other.bfill()
df

   Number Other
0    1435  COOL
1    1435  COOL
2    1435  COOL
3    1817   YES
4    1817   YES
于 2017-11-10T18:50:53.523 回答
1

我认为这与此处所述的问题相同:

Pandas 用组值填充 NA 如果您想使用最常见的值,您可以执行以下操作:

df = pd.DataFrame([[1435, np.nan],
                   [1435, 'YES'],
                   [1435, np.nan],
                   [1435, 'COOL'],
                   [1435, 'COOL'],
                   [1817, np.nan],
                   [1817, 'YES']],
                   columns=['Number', 'Other'])

df['Other'] = df.groupby('Number').transform(lambda x: x.fillna(x.value_counts().index[0]))

这将导致

    Number  Other
0   1435    COOL
1   1435    YES
2   1435    COOL
3   1435    COOL
4   1435    COOL
5   1817    YES
6   1817    YES

所以结合 groupby、transform 和 fillna 方法。

于 2017-11-10T18:53:41.317 回答
0

为了填充最后一个可用值,请尝试,

df["Number"]=df["Number"].bfill()
于 2017-11-10T16:20:35.710 回答