python - pandas:根据条件过滤整个组

标签 python pandas dataframe filter

我创建了以下 MWE

data = {'Name': ['Tom', 'Tom', 'Tom', 'Tom', 'Tom', 'Tom', 'Tom' , 'Tom', 'Tom', 'Tom'], 'Article': ['A', 'A', 'A', 'B', 'B', 'A', 'A', 'A', 'B', 'B'], 'Weekday' : [1,2,3,2,3,1,2,3, 1, 2], 'Value': [1,40,3,91,10,6,9,10, 20, 10]}  

df_test = pd.DataFrame(data)

        Name    Article Weekday Value
    0   Tom        A    1       1
    1   Tom        A    2      40
    2   Tom        A    3       3
    3   Tom        B    2      91
    4   Tom        B    3      10
    5   Tom        A    1       6
    6   Tom        A    2       9
    7   Tom        A    3      10
    8   Tom        B    1      20
    9   Tom        B    2      10

其中一个组由名称-文章对组成。我想过滤掉所有现有三个工作日的值中计数不至少为 2 的所有组。因此,应该只存在具有三个工作日 (1,2,3) 且至少有两个计数的组。如果名称文章只有两个工作日且至少有两个计数,则也应该将其过滤掉。

预期的输出应该是这样的

        Name    Article Weekday Value
    0   Tom        A    1       1
    1   Tom        A    2      40
    2   Tom        A    3       3
    5   Tom        A    1       6
    6   Tom        A    2       9
    7   Tom        A    3      10

最佳答案

如果您想确保每个 Name/Article 每个 Weekday 至少有 2 个计数,您可以计算一个crosstab计算 Name/ArticleWeekday 的组合。

然后您可以使用任何您想要的过滤器,这里我们保留具有 allName/Article 组合至少 2 个值:

counts = pd.crosstab([df_test['Name'], df_test['Article']], df_test['Weekday'])
keep = counts[counts.ge(2).all(axis=1)]

out = df_test.set_index(['Name', 'Article']).loc[keep.index].reset_index()

# or
# out = df_test.merge(keep[[]].reset_index())

要计算所有天,而仅计算给定数字(例如 ≥3),请使用:

keep = counts[counts.ge(2).sum(axis=1).ge(3)]

输出:

  Name Article  Weekday  Value
0  Tom       A        1      1
1  Tom       A        2     40
2  Tom       A        3      3
3  Tom       A        1      6
4  Tom       A        2      9
5  Tom       A        3     10

中间计数:

Weekday       1  2  3
Name Article         
Tom  A        2  2  2  # all 3 have ≥ 2, we keep
     B        1  2  1  # not all ≥ 2, discard

关于python - pandas:根据条件过滤整个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75681421/

相关文章:

c++ - 通过 Python 脚本调用 C++ 函数

Python Pandas : Label data with condition on rows

python - 使用多索引数据框生成复杂的 seaborn 点图

python - 如何使用 Pandas Dataframe 列解析和评估数学表达式?

python - Pandas 为列中的连续值分配累积计数

python - 嵌套循环中的向量化操作 : Python

python - 在 DataFrame 索引上应用函数

python - 是否可以将 pandas 系列附加到列表中

python - Pandas:将组转换为 json 列表,而不使用 groupby 或 apply

python - 根据条件合并列