我正在 Kaggle 上使用 SpaceShipTitanic 数据集。
我有一个df。我想按列分组,根据该组查找第二列的众数,并用最常见的值填充该第二列中组中的所有 np.NaN 值。
我觉得我在回避这个问题而没有找到答案。
我尝试过 .mask 和 .transform 和 .agg。我已经使用了 lambda 函数并尝试处理索引,但我没有实现我想要的。我一定没有正确地将零件组装在一起
这是一个简短的例子。 从这样的事情开始。
df =
Passenger_Group HomePlanet
1 1 Earth
2 1 Mars
3 1 Earth
4 1 NaN
5 2 NaN
6 2 Venus
7 3 Ceres
请注意,在完整的数据集中有更多的列和行,因此我必须解决其他列名称。 我们的目标是最终得到一个看起来像这样的 df
df =
Passenger_Group HomePlanet
1 1 Earth
2 1 Mars
3 1 Earth
4 1 Earth
5 2 Venus
6 2 Venus
7 3 Ceres
我觉得这应该是一个简单的命令。但我尝试的一切都不太有效。
什么是简洁的Python方式来做到这一点?
有一个干净的解决方案,使用 pandas 用每个组的众数填充 NaN 值:
数据处理.py
df['HomePlanet'] = df.groupby('Passenger_Group')['HomePlanet'].transform(lambda x: x.fillna(x.mode().iloc[0]))
这一行:
如果您更喜欢更明确的方法:
# Calculate modes for each group
modes = df.groupby('Passenger_Group')['HomePlanet'].agg(lambda x: x.mode().iloc[0])
# Fill NaN values using the calculated modes
df['HomePlanet'] = df['HomePlanet'].fillna(df['Passenger_Group'].map(modes))
这两种方法都会给您带来想要的结果。第一个选项更简洁,而第二个选项使步骤更清晰。