【发布时间】:2021-07-18 18:13:28
【问题描述】:
我有一个数据框:
Name StartPoint EndPoint isDelivered Customer
0 A 1 4 0 C1
1 A 1 4 0 C1
2 A 2 5 1 C1
3 A 3 5 0 C1
4 A 3 6 0 C1
5 A 3 6 1 C1
6 B 1 4 0 C2
7 B 1 4 0 C2
8 B 2 5 1 C2
9 B 3 5 1 C2
10 B 3 6 1 C2
11 B 3 8 0 C2
12 B 3 8 1 C2
我想按Name 分组,每个组应该有满足以下条件的行:
-
StartPoint列中的最小值 -
EndPoint列中的最大值和isDelivered列中的值 1
这就是我所做的:
groups = df.groupby(['Name']).StartPoint
groups1 = df.groupby(['Name']).EndPoint
min_StartPoint = groups.transform(min)
max_EndPoint = groups1.transform(max)
df1 = df[(df.StartPoint==min_StartPoint)|(df.EndPoint==max_EndPoint)]
得到的结果是:
Name StartPoint EndPoint isDelivered Customer
0 A 1 4 0 C1
1 A 1 4 0 C1
4 A 3 6 0 C1
5 A 3 6 1 C1
6 B 1 4 0 C2
7 B 1 4 0 C2
11 B 3 8 0 C2
12 B 3 8 1 C2
但第 4 行和第 11 行在 isDelivered 中没有值 1,因此它们不满足第二个条件。
我想要的结果是:
Name StartPoint EndPoint isDelivered Customer
0 A 1 4 0 C1 # Min value in StartPoint
1 A 1 4 0 C1 # Min value in StartPoint
5 A 3 6 1 C1 # Max value in EndPoint and 1 in isDelivered
6 B 1 4 0 C2 # Min value in StartPoint
7 B 1 4 0 C2 # Min value in StartPoint
12 B 3 8 1 C2 # Max value in EndPoint and 1 in isDelivered
有没有办法使用我当前的解决方案来实现这一点?
【问题讨论】:
标签: python pandas dataframe group-by transform