【问题标题】:Python, Pandas: to filter and drop variables less than 5Python,Pandas:过滤和删除小于 5 的变量
【发布时间】:2021-02-15 21:06:01
【问题描述】:

经理电话号码列表的列:

日期时间 |客户 |经理
xx |xx |+44....

任务是计算每个号码拨打了多少电话...
df['mmanager'].value_counts()

及之后 - 过滤列表中的电话号码:删除号码少于 5 个电话的行。

示例

import pandas as pd
import numpy as np
from itertools import product, chain

managers = [f"{manager}_{i}" for i, manager in product(range(3),("Bob", "Silvie", "Steve"))]
clients = [f"{client}_{i}" for i, client in product(range(20),("Lukas", "Max", "Julia"))]

weights = np.array([100.0]*len(managers))
weights[:5] = 1
weights *= 1/sum(weights)

np.random.seed(0)
size = 10**3
df = pd.DataFrame({"manager": np.random.choice(managers,size=size, p=weights),"clients": np.random.choice(clients,size=size)})
df.value_counts("manager").sort_values().head(10)

给予

manager
Steve_0       1
Bob_1         1
Bob_0         2
Silvie_0      3
Silvie_1      4
Steve_2     238
Silvie_2    240
Steve_1     252
Bob_2       259
dtype: int64

所以我想从列表中删除Steve_0, Bob_1, Bob_0, Silvie_0 and Silvie_1

【问题讨论】:

  • 显示数据样本

标签: python pandas data-science data-analysis


【解决方案1】:

Series.map 用于新列或Series,最后通过Series.gt 进行比较以获得更大的5 并通过boolean indexing 过滤:

df['count'] = df['mmanager'].map(df['mmanager'].value_counts())

df = df[df['count'].gt(5)]

如果需要没有帮助列的解决方案:

df = df[df['mmanager'].map(df['mmanager'].value_counts()).gt(5)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多