gpt4 book ai didi

Python Pandas 根据条件使用另一个数据帧中的值填充缺失的邮政编码

转载 作者:行者123 更新时间:2023-12-02 19:25:37 25 4
gpt4 key购买 nike

我有一个数据集,其中根据邮政编码向城市添加坐标,但其中一些邮政编码丢失。此外,在某些情况下,城市缺失,州缺失,或者两者都缺失。例如:

     ca_df[['OWNER_CITY', 'OWNER_STATE', 'OWNER_ZIP']] 

OWNER_CITY OWNER_STATE OWNER_ZIP
495 MIAMI SHORE PA
496 SEATTLE

但是,第二个数据集包含城市、州和匹配的邮政编码。这是完整的,没有任何缺失值。

df_coord.head() 

OWNER_ZIP CITY STATE
0 71937 Cove AR
1 72044 Edgemont AR
2 56171 Sherburn MN

如果满足以下条件,我想填写第一个数据框中缺少的邮政编码:

  1. 邮政编码为空
  2. 存在城市
  3. 状态存在

这是一种全有或全无的操作,要么满足所有三个条件并且填充邮政编码,要么不进行任何更改。

但是,这是一个相当大的数据集,包含超过 5000 万条记录,因此理想情况下,我希望通过按列工作来矢量化操作。

从技术上讲,这适合 np.where 但是 据我所知, np.where 只接受以下格式的条件:

df1['OWNER_ZIP'] = np.where(df["cond"] ==X, df_coord['OWNER_ZIP'], "") 

如何确保仅在满足所有条件时才填写缺失的邮政编码?

最佳答案

给定ca_df:

    OWNER_CITY OWNER_STATE OWNER_ZIP
0 Miami Shore Florida 111
1 Los Angeles California NaN
2 Houston NaN NaN

df_coord:

  OWNER_ZIP         CITY       STATE
0 111 Miami Shore Florida
1 222 Los Angeles California
2 333 Houston Texas

您可以使用pd.notna以及pd.DataFrame#index像这样:

inferrable_zips_df = pd.notna(ca_df["OWNER_CITY"]) & pd.notna(ca_df["OWNER_STATE"])
is_inferrable_zip = ca_df.index.isin(df_coord[inferrable_zips_df].index)

ca_df.loc[is_inferrable_zip, "OWNER_ZIP"] = df_coord["OWNER_ZIP"]

ca_df 结果为:

    OWNER_CITY OWNER_STATE OWNER_ZIP
0 Miami Shore Florida 111
1 Los Angeles California 222
2 Houston NaN NaN

我已将 "" 更改为 np.nan,但如果您仍然希望使用 "" 那么您只需将 pd.notna(ca_df[...]) 更改为 ca_df[...] == ""

关于Python Pandas 根据条件使用另一个数据帧中的值填充缺失的邮政编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62444189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com