我有以下熊猫数据框:
df =
A B C
111-ABC 123 EEE
111-ABC 222 EEE
111-ABC 444 XXX
222-CCC 222 YYY
222-CCC 333 67T
333-DDD 123 TTT
333-DDD 123 BTB
333-DDD 444 XXX
333-DDD 555 AAA
Run Code Online (Sandbox Code Playgroud)
我想删除列中A不包含的所有行组(分组依据) 。123B
预期结果是这样的(行组222-CCC被删除):
result =
A B C
111-ABC 123 EEE
111-ABC 222 EEE
111-ABC 444 XXX
333-DDD 123 TTT
333-DDD 123 BTB
333-DDD 444 AAA
Run Code Online (Sandbox Code Playgroud)
怎么做?我认为首先我应该使用groupby,但是如何过滤掉行组,而不仅仅是特定的行?
result = df.groupby("A").... ??
Run Code Online (Sandbox Code Playgroud)
使用query
a = df.query('B == 123').A.unique()
df.query('A in @a')
A B C
0 111-ABC 123 EEE
1 111-ABC 222 EEE
2 111-ABC 444 XXX
5 333-DDD 123 TTT
6 333-DDD 123 BTB
7 333-DDD 444 XXX
8 333-DDD 555 AAA
Run Code Online (Sandbox Code Playgroud)
您可以在第一个条件中包含其他条件query
b = df.query('B == 123 & C == "EEE"').A.unique()
df.query('A in @b')
A B C
0 111-ABC 123 EEE
1 111-ABC 222 EEE
2 111-ABC 444 XXX
Run Code Online (Sandbox Code Playgroud)
如果速度很重要的话。尝试这个。
cond1 = df.B.values == 123
a = np.unique(df.A.values[cond1])
df.loc[df.A.isin(a)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |