python - 根据其他列值处理缺失值

标签 python pandas

我有一个数据框 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

enter image description here

<小时/>

引用代码
注意:附加列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

enter image description here

关于python - 根据其他列值处理缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40275462/

相关文章:

python - 如何在 python 中将一个列表映射到另一个列表?

python - 从命令提示符运行单元测试

python - 为什么可以添加 pd.Timedelta 和 None?

python - 我应该将 CSV 转换为 ndarray 来绘制图表吗?

Python:是否可以抓取一个非常特定的网页?

python - 使用 openpyxl 将日期格式更改为 xlsx 中的文本

python - 如何在 python 中的同一个图形上绘制多个密度图

python - 为什么使用 pd.Dataframe() 创建数据帧并手动设置索引时出现 NaN?

python - 根据另一列中的值替换 DataFrame 列中的值

python - 通过将每列的宽度定义为字符数来读取 python pandas 中的数据