在每组 Pandas 数据帧中保留公共行

Mar*_*røy 4 python pandas

鉴于以下熊猫数据框:

  | a  b
--+-----
0 | 1  A 
1 | 2  A 
2 | 3  A 
3 | 4  A 
4 | 1  B 
5 | 2  B 
6 | 3  B 
7 | 1  C 
8 | 3  C 
9 | 4  C 
Run Code Online (Sandbox Code Playgroud)

如果你按列分组,b我想执行一个操作,只保留它们有a共同列的行。结果将是以下数据框:

  | a  b
--+-----
0 | 1  A 
2 | 3  A 
4 | 1  B 
6 | 3  B 
7 | 1  C 
8 | 3  C 
Run Code Online (Sandbox Code Playgroud)

是否有一些内置方法可以做到这一点?

ank*_*_91 7

您可以pivot_tabledropna此处尝试,然后使用sreries.isin以下方法进行过滤:

s = df.pivot_table(index='a',columns='b',aggfunc=len).dropna().index
df[df['a'].isin(s)]
Run Code Online (Sandbox Code Playgroud)

类似的crosstab

s = pd.crosstab(df['a'],df['b'])
df[df['a'].isin(s[s.all(axis=1)].index)]
Run Code Online (Sandbox Code Playgroud)
   a  b
0  1  A
2  3  A
4  1  B
6  3  B
7  1  C
8  3  C
Run Code Online (Sandbox Code Playgroud)

  • @MartinRindarøy *在每个组中保留公共行*?:) 总是很难找到合适的标题 (2认同)