首页 > 解决方案 > 如何根据对应的值过滤df

问题描述

我有一个 df 如下:

data = {'retailer': [2, 2, 2, 2, 2, 5, 5, 5, 5, 5],
        'store': [1, 1, 1, 1, 1, 7, 7, 7, 7, 7],
        'week':[2021110701, 2021101301, 2021100601, 2021092901, 2021092201, 2021110701, 2021101301, 2021100601, 2021092901, 2021092201],
        'isPeriod': [False, True, False, False, False, False, False, True, False, False],
        'quadId': [2021112804, 2021103104, 2021103104, 2021103104, 2021103104, 2021100304, 2021100304, 2021103104, 2021103104, 2021103104]
       }
data = pd.DataFrame(data)

我想找到'isPeriod' == True的位置,获取'isPeriod'为True的相应'quadId'值,然后过滤我的整个数据框以仅具有相应的'quadId'。

例如,在我的 df 中,我们可以看到在第二行中,“isPeriod”为 True,对应的“quadId”为 2021103104。所以我希望过滤后的 df 仅包含“quadId”为 2021103104 的行。

在这种情况下,我的示例过滤 df 看起来像:

data = {'retailer': [2, 2, 2, 2, 5, 5, 5],
        'store': [1, 1, 1, 1, 7, 7, 7],
        'week':[2021101301, 2021100601, 2021092901, 2021092201, 2021100601, 2021092901, 2021092201],
        'isPeriod': [True, False, False, False, True, False, False],
        'quadId': [2021103104, 2021103104, 2021103104, 2021103104, 2021103104, 2021103104, 2021103104]
       }
data = pd.DataFrame(data)

有没有办法我可以做到这一点?谢谢!(同样,如果 isPeriod 有多个 True 值,quadId 对它们来说都是相同的)

标签: pythonpandasdataframefilter

解决方案


用于isin检查是否存在,然后loc

valid_quarters = data.loc[data.isPeriod, 'quadId']
data[data['quadId'].isin(valid_quarters)]

输出:

   retailer  store        week  isPeriod      quadId
1         2      1  2021101301      True  2021103104
2         2      1  2021100601     False  2021103104
3         2      1  2021092901     False  2021103104
4         2      1  2021092201     False  2021103104
7         5      7  2021100601      True  2021103104
8         5      7  2021092901     False  2021103104
9         5      7  2021092201     False  2021103104

推荐阅读