我正在尝试填充数据框中的缺失值。但是我想用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来获取值,但我似乎无法弄清楚如何执行此操作并返回我正在寻找的结果。非常感谢任何帮助。
答案 0 :(得分:1)
看起来你想要的只是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
答案 1 :(得分:1)
我认为这与此处所述的问题相同:
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。
答案 2 :(得分:0)
要填写上一个可用值,请尝试
df["Number"]=df["Number"].bfill()