gpt4 book ai didi

pandas - 通过三列的组合过滤前 n 个值

转载 作者:行者123 更新时间:2023-12-01 22:55:08 25 4
gpt4 key购买 nike

我有一个排序的数据框,有 4 列,如下所示。我正在尝试过滤我的数据帧,以便对于 (Var1, Var2, Var3) 的每个组合,我为 Var4 保留 2 个第一个明确值。例如,我的数据框中的 (Var1, Var2, Var3) 的第一个组合是 (A, B, C)。该组合的前两个不同值是 value_1 和 value_2。(Var1, Var2, Var3) 的第二个组合是 (A, C, C)。对于这个组合,我只有一种类型的值,即 value_14。等等...

输入:

       Var1  Var2  Var3  Var4
1 A B C value_1
2 A B C value_1
3 A B C value_1
4 A B C value_1
5 A B C value_2
6 A B C value_2
7 A B C value_3
8 A B C value_3
9 A B C value_3
10 A B C value_4
11 A C C value_14
12 A C C value_14
13 A C C value_14
14 A C C value_14
15 B B C value_21
16 B B C value_21
17 B B C value_32
18 B B C value_32
19 B B C value_33
20 B B C value_43

输出:

       Var1  Var2  Var3  Var4
1 A B C value_1
2 A B C value_1
3 A B C value_1
4 A B C value_1
5 A B C value_2
6 A B C value_2
11 A C C value_14
12 A C C value_14
13 A C C value_14
14 A C C value_14
15 B B C value_21
16 B B C value_21
17 B B C value_32
18 B B C value_32

请注意,我的数据框有 500 万行。到目前为止,我已经找到了使用循环的解决方案,但需要将近一个小时。

最佳答案

我们可以使用

df[df.groupby(['Var1','Var2','Var3'])['Var4'].apply(lambda x : x.groupby(x).ngroup()<2)]

Out[106]:
Var1 Var2 Var3 Var4
1 A B C value_1
2 A B C value_1
3 A B C value_1
4 A B C value_1
5 A B C value_2
6 A B C value_2
11 A C C value_14
12 A C C value_14
13 A C C value_14
14 A C C value_14
15 B B C value_21
16 B B C value_21
17 B B C value_32
18 B B C value_32

关于pandas - 通过三列的组合过滤前 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com