簡體   English   中英

僅在 df pandas 中顯示特定組

[英]Only show specific groups in a df pandas

您好,我需要關注表中的特定組。

這是一個例子:

groups col1 
A 3
A 4
A 2
A 1
B 3
B 3
B 4
C 2
D 4
D 3

我只想顯示包含 3 和 4 但沒有其他數字的組。 在這里我應該得到:

groups col1 
B 3
B 3
B 4
D 4
D 3

這里有兩種可能的方法 - 通過Series.isin測試成員資格,然后通過GroupBy.transformGroupBy.all獲取所有具有所有True的組,最后通過boolean indexing過濾:

df1 = df[df['col1'].isin([3,4]).groupby(df['groups']).transform('all')]
print (df1)
  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

另一種方法是首先獲取所有組值,其中NOT包含值3,4並傳遞給另一個具有反轉掩碼的isin函數:

df1 = df[~df['groups'].isin(df.loc[~df['col1'].isin([3,4]), 'groups'])]
print (df1)
  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

我們也可以使用GroupBy.filter

new_df=df.groupby('groups').filter(lambda x: x.col1.isin([3,4]).all() )
print(new_df)

  groups  col1
4      B     3
5      B     3
6      B     4
8      D     4
9      D     3

從 lambda 函數中刪除Series.isin的替代方法:

df['aux']=df['col1'].isin([3,4])
df.groupby('groups').filter(lambda x: x.aux.all()).drop('aux',axis=1)

使用df.loc[]然后按正常邏輯搜索應該​​可以工作。

import pandas as pd

data = [['A', 3],
        ['A', 4],
        ['A', 2],
        ['A', 1],
        ['B', 3],
        ['B', 3],
        ['B', 4],
        ['C', 2],
        ['D', 4],
        ['D', 3]]
df = pd.DataFrame(data, columns=["col1", "col2"])

df = df.loc[df["col2"] >= 3]
print(df.head())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM