Python中如何筛选匹配另一数据框IDBANK列的行?
Pandas筛选匹配另一DataFrame中IDBANK的行
已知DataFrame结构
df_idbank的列类型:
>>> df_idbank.dtypes DATASET object IDBANK object KEY object FREQ object INDICATEUR object CORRECTION_label_en object
df_INDICATORS的结构:
>>> df_INDICATORS Label IDBANK 0 Summary indicator of overall economic situatio... 1586891 1 Business climate summary indicator - SA series 1586890 2 Trend of expected activity - Overall - SA series 1586916 3 Trend of expected activity - Building structur... 1586885 4 Trend of expected activity - Finishings - SA s... 1586886
单ID筛选示例:
已知筛选IDBANK为"001586891"的行代码:
df_idbank = df_idbank.loc[(df_idbank.FREQ == "M") & (df_idbank.CORRECTION_label_en == "Seasonal adjusted") & (df_idbank.IDBANK =="001586891") ]
批量匹配df_INDICATORS中IDBANK的筛选方法
注意两个DataFrame的IDBANK格式差异:df_idbank中是带前导零的字符串(如"001586891"),df_INDICATORS中是整数(如1586891),需先统一格式再批量匹配。
具体代码:
- 先将df_INDICATORS的IDBANK转换为和df_idbank一致的7位带前导零字符串:
target_ids = df_INDICATORS['IDBANK'].apply(lambda x: f"{x:07d}")
- 结合原有筛选条件,用
isin()实现批量匹配:
df_idbank_filtered = df_idbank.loc[ (df_idbank.FREQ == "M") & (df_idbank.CORRECTION_label_en == "Seasonal adjusted") & (df_idbank.IDBANK.isin(target_ids)) ]
格式兼容补充:
如果不确定格式是否统一,可强制将两边IDBANK都转为标准字符串格式,避免类型不匹配:
# 统一转换为7位带前导零的字符串 df_idbank['IDBANK'] = df_idbank['IDBANK'].astype(str).str.zfill(7) target_ids = df_INDICATORS['IDBANK'].astype(str).str.zfill(7)
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

