根据其他列值处理缺失值

时间:2016-10-27 03:08:27

标签: 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中所看到的,我有两列" City"和"州"。有3个城市有'' (没有价值)。我想为城市中的缺失值分配一个值。分配必须按以下方式完成 - 存在特定状态的最大次数的城市应分配给该特定状态的缺失值。例如:第二个缺失的城市对应于州MA。现在,如果我仔细查看数据,"剑桥"是州MA发生次数最多的城市。因此,该缺失值应替换为" Cambridge"。

按照同样的趋势,第一个失踪的城市应该是华盛顿,第二个应该是剑桥,第三个应该是迈阿密。

如何使用熊猫完成此任务?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

top_cities = {}
for state in np.unique(df.State):
    cities = [city for city in df[df.State==state].City.values if city]
    top_cities[state] = max(set(cities), key=cities.count)

new_cities = []
for city, state in df.values:
    if city:
        new_cities.append(city)
    else:
        new_cities.append(top_cities[state])

df['City'] = new_cities

enter image description here