我正在尝试填充我的数据帧中缺少的值。但是,我想用groupby语句填充缺少的列。所以这是我的数据帧的样子...
Number Other
1435 NaN
1435 NaN
1435 COOL
1817 NaN
1817 YES
所以我想要做的基本上就是取最大值或具有数据的最后一个值,并用该值填充该特定数字的na……例如,对于1435,我想要按数字对其进行分组,然后在该列中查找max(),这样它就会发现很酷,然后用酷填充另一列中的所有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来获得值,但我似乎不知道如何做到这一点并返回我正在寻找的结果。任何帮助都将不胜感谢。
发布于 2017-11-10 18:50:54
看起来你真正想要的就是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-10 18:53:41
我认为这和这里所说的问题是一样的:
Pandas Fill NA with Group Value如果您希望使用最常用的值,则可以执行以下操作:
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-10 16:20:36
要使用最后一个可用值填充,请尝试,
df["Number"]=df["Number"].bfill()
https://stackoverflow.com/questions/47227002
复制