尝试使用str.contains和boolean mask,但是在Pandas中只有两个单值实例

Kir*_*wty 2 python string boolean pandas pandas-groupby

我想要做的是保持所有行具有相同的唯一IDIF.这些行中的任何一行在Yurt列中仅包含两个" - "实例.

我正在考虑str.contains通过执行以下操作来使用a 和布尔掩码:

df[df['ID'].isin(df.loc[df.Yurt.str.contains('-'), 'ID'].unique())]
Run Code Online (Sandbox Code Playgroud)

...但不确定我如何只保留只有两个没有值的实例的行.

示例df:

ID      %       Yurt
abc123  0.833   Bodega
abc123  0.87    -
abc123  0.867   -
abc123  0.812   -
lmn789  0.837   Mickey's
lmn789  0.856   Chopped Cheese
lmn789  0.813   -
lmn789  0.812   -
xyz456  0.111   -
xyz456  0.222   -
xyz456  0.333   -
xyz456  0.444   -
Run Code Online (Sandbox Code Playgroud)

结果df:

ID      %       Yurt
lmn789  0.837   Mickey's
lmn789  0.856   Chopped Cheese
lmn789  0.813   -
lmn789  0.812   -
Run Code Online (Sandbox Code Playgroud)

roo*_*oot 5

groupby在"ID"列上执行a 并使用filter:

df = df.groupby('ID').filter(lambda grp: grp['Yurt'].eq('-').sum() == 2)
Run Code Online (Sandbox Code Playgroud)

输出:

       ID      %            Yurt
4  lmn789  0.837        Mickey's
5  lmn789  0.856  Chopped Cheese
6  lmn789  0.813               -
7  lmn789  0.812               -
Run Code Online (Sandbox Code Playgroud)