我有一个数据框 df:
df = pd.DataFrame({'City': ['Cambridge','','Boston','Washignton','','Tampa',
'Danvers','Miami','Cambridge','Miami','','Washington'], 'State': ['MA','DC','MA',
'DC','MA','FL','MA','FL','MA','FL','FL','DC']})
正如我们在上面的 df 中看到的,我有两列“城市”和“州”。有 3 个城市带有“”(无值)。我想为城市中那些缺失的值分配一个值。分配必须按以下方式完成 - 应将特定州存在最大次数的城市分配给该特定州的缺失值。例如:第2个缺失城市对应MA州。现在,如果我仔细查看数据,“剑桥”是 MA 州出现次数最多的城市。因此,该缺失值应替换为“Cambridge”。
按照同样的趋势,第一个缺失的城市应该是华盛顿,第二个应该是剑桥,第三个应该是迈阿密。
我将如何使用 pandas 完成此任务?
最佳答案
IIUC
df.update(df.replace('', np.nan).set_index('State', append=True) \
.groupby(level='State').City \
.apply(lambda x: x.fillna(x.value_counts().idxmax())) \
.reset_index('State', drop=True))
df
<小时/>
引用代码
注意:附加列A
是原始的City
列,可以更轻松地查看填写的城市位置。
df = pd.DataFrame({
'City': ['Cambridge','','Boston','Washignton','','Tampa',
'Danvers','Miami','Cambridge','Miami','','Washington'],
'State': ['MA','DC','MA','DC','MA','FL',
'MA','FL','MA','FL','FL','DC'],
'A': ['Cambridge','','Boston','Washignton','','Tampa',
'Danvers','Miami','Cambridge','Miami','','Washington']})
df.update(df.replace('', np.nan).set_index('State', append=True) \
.groupby(level='State').City \
.apply(lambda x: x.fillna(x.value_counts().idxmax())) \
.reset_index('State', drop=True))
df
关于python - 根据其他列值处理缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40275462/