过滤器组包含特定值
Filter group contains specific values
我想过滤具有特定值的组。取下面的样本数据:
df = pd.DataFrame({'comp': ['a','b','a','b','c','d', 'c', 'c', 'd'], 'grid': [1,2,2,4,1,2,1,2,2]})
df
:
comp grid val
0 a 1 10
1 b 2 11
2 a 2 12
3 b 4 13
4 c 1 14
5 d 2 15
6 c 1 16
7 c 2 17
8 d 2 18
我想分组 comp
并检查在每个组中 grid
是否至少有一个值 1 和一个值 2。预期结果是组 a
和组 c
comp grid val
0 a 1 10
2 a 2 12
4 c 1 14
6 c 1 16
7 c 2 17
我尝试 groupby
和 transform
但没有成功
您可以使用 GroupBy.transform
与比较 set
s:
#if contains 1,2 and some another values
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) >= set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
#if contains only 1,2
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) == set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
如果需要至少一个 1
和一个 2
是可能的使用:
intersect = np.intersect1d(df.loc[df['grid'].eq(1),'comp'], df.loc[df['grid'].eq(2),'comp'])
print (intersect)
['a' 'c']
df = df[df['comp'].isin(intersect)]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
我想过滤具有特定值的组。取下面的样本数据:
df = pd.DataFrame({'comp': ['a','b','a','b','c','d', 'c', 'c', 'd'], 'grid': [1,2,2,4,1,2,1,2,2]})
df
:
comp grid val
0 a 1 10
1 b 2 11
2 a 2 12
3 b 4 13
4 c 1 14
5 d 2 15
6 c 1 16
7 c 2 17
8 d 2 18
我想分组 comp
并检查在每个组中 grid
是否至少有一个值 1 和一个值 2。预期结果是组 a
和组 c
comp grid val
0 a 1 10
2 a 2 12
4 c 1 14
6 c 1 16
7 c 2 17
我尝试 groupby
和 transform
但没有成功
您可以使用 GroupBy.transform
与比较 set
s:
#if contains 1,2 and some another values
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) >= set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
#if contains only 1,2
df = df[df.groupby('comp')['grid'].transform(lambda x: set(x) == set([1,2]))]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2
如果需要至少一个 1
和一个 2
是可能的使用:
intersect = np.intersect1d(df.loc[df['grid'].eq(1),'comp'], df.loc[df['grid'].eq(2),'comp'])
print (intersect)
['a' 'c']
df = df[df['comp'].isin(intersect)]
print (df)
comp grid
0 a 1
2 a 2
4 c 1
6 c 1
7 c 2