【问题标题】:filling in missing data based on another column根据另一列填充缺失数据
【发布时间】:2020-01-10 21:41:58
【问题描述】:

我想根据另一列填充一列中的缺失值。 我有一列美国州的数据,另一列是城市的数据。城市中的一些条目丢失了。我想根据它们所属州的模式城市来填充这些城市。 如果失踪的城市是为了华盛顿特区,那就填满华盛顿。

我试过这个:

states = ['OH', 'WV', 'CA', 'FL', 'GA', 'SC', 'NE', 'IA', 'IL', 'MO', 'WI',
       'IN', 'MI', 'NJ', 'NY', 'CT', 'MA', 'RI', 'NH', 'PA', 'KY', 'MD',
       'VA', 'DC', 'DE', 'TX', 'WA', 'OR', 'AL', 'TN', 'NC', 'MN', 'KS',
       'OK', 'LA', 'CO', 'UT', 'AZ', 'NM', 'NV', 'VT', 'MS', 'AR', 'MT',
       'ME', 'ND', 'WY', 'ID', 'SD']
for state in states:
    freq_city = df.loc[lambda df: df['State'] == state]['City'].mode()[0]
    for df['State'] in states:
        if df['State'] == state:
            df['City'].fillna(freq_city,inplace=True)

然而,if 语句是模棱两可的,这是正确的。只是不知道下一步该做什么

【问题讨论】:

  • 你能发布数据吗?具有所需结果的最小样本框架将帮助我们帮助您。在我的脑海中,它应该类似于:df['City'] = df.groupby('State')['City'].transform(lambda grp: grp.value_counts().iloc[0])。 (不能使用modeiirc)
  • for df['State'] in states: 似乎是错误的,您将 Series 重新用作 for 循环中的项目。还有df的结构是什么?
  • @BrianJoseph 你离得并不远,只需要修改你的代码看起来像这样:df['City'] = df.groupby('State')['City']。变换(lambda grp: grp.fillna(grp.value_counts().index[0]))

标签: python-3.x pandas conditional-statements missing-data data-cleaning


【解决方案1】:

这应该可以解决问题:

根据你所说的“失踪城市”是什么意思,

如果是None:

df.loc[df["City"].isna(), "City"]=\
    df.groupby("State")["City"].apply(pd.Series.mode)\
    .loc[df.loc[df["City"].isna(), "State"]].to_list()

如果是空字符串:

df.loc[df["City"]=="", "City"]=\
    df.groupby("State")["City"].apply(pd.Series.mode)\
    .loc[df.loc[df["City"]=="", "State"]].to_list()

如果两者兼有:

df.loc[df["City"].fillna("")=="", "City"]=\
    df.groupby("State")["City"].apply(pd.Series.mode)\
    .loc[df.loc[df["City"].fillna("")=="", "State"]].to_list()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多