【问题标题】:Python Pandas: Is There a Faster Way to Split and Recombine a DataFrame based on criteria?Python Pandas:是否有更快的方法来根据标准拆分和重组 DataFrame?
【发布时间】:2017-02-07 16:54:17
【问题描述】:

我想根据特定列“ContactID”对该 DataFrame 进行分组,但如果该组的“PaymentType”列不包含特定值,那么我想从 DataFrame 中删除整个组。

我有这样的事情:

UniqueID = data.drop_duplicates('ContactID')['ContactID'].tolist()
OnlyRefinance=[]
for i in UniqueID:
    splits = data[data['ContactID']==i].reset_index(drop=True)
    if any(splits['PaymentType']==160):
        OnlyRefinance.append(splits)
OnlyRefinance = pd.concat(OnlyRefinance)

这可行,但速度很慢,我想知道是否有更快的方法来完成此操作。

【问题讨论】:

    标签: python pandas dataframe split


    【解决方案1】:

    您可以使用的另一个选项groupby.filter

    data.groupby("ContactID").filter(lambda g: (g.PaymentType == 160).any())
    

    这只会保留 PaymentType 包含 160 的组。

    【讨论】:

    • 这是一个不错的简单解决方案 +1
    • @EdChum 谢谢。
    • 非常感谢 Psidom。这是完美的!
    【解决方案2】:

    您可以通过以下方式更轻松地做到这一点:

    to_drop = data.loc[data['PaymentType'] == 160, 'ContactID'].unique()
    data[~data['ContactID'].isin(to_drop)]
    

    所以首先过滤掉所有不满足条件的行,得到我们想要删除的唯一联系人ID

    然后将这些传递给 isin 并使用 ~ 反转掩码,这将删除此数组中 ContactID 所在的所有行

    【讨论】:

    • 感谢 EdChum!这是一个很好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多