는 다음과 같은 인위적인 설정한다고 가정팬더에서 Groupby 기준을 필터링하는 방법은 무엇입니까?
import pandas as pd
d = {'fname': ['bob', 'Bob', 'larry', 'LARRY', 'Larry', 'Dick'],
'lname': ['harris', 'Larson', 'Douglas', 'REDMOND', 'Beal', 'Dyke']}
df = pd.DataFrame(d)
g = df.groupby(df.fname.str.lower())
query = ['bob', 'dick', 'chris']
일반 영어를, 나는 경우 변경 사항을 무시하고, 이름 쿼리에있는 항목에 대한 전체 Dataframe의보기를 만들려고합니다. 나는 (I 생각) 찾아 하나의 DataFrame에 query
의 항목에 해당하는 그룹을 결합 g
에 효율적이고 관용적 filter()
에 해당하는 작업을 수행하고자하는, 즉 :
fname lname
0 bob harris
1 Bob Larson
5 Dick Dyke
그러나, filter()
(df
이 크고 query
이 작은 경우 중요) 그룹의 전체 집합을 반복하는 것처럼 보이며 어쨌든 filter()
에서 그룹 이름에 액세스 할 수없는 것으로 보입니다.
내가 가지고 올 수있는 최선 :
pd.concat([pd.DataFrame()] + map(lambda y: g.get_group(y),
filter(lambda x: x in g.groups, query)))
하지만이 효율적이거나 관용적 아닙니다 생각한다.
UPDATE :
나는이 백업 현실 세계의 문제에서,df
매우 큰 하나가 발생한 것을 명확히해야하지만, 여러 독립적 인 작은
query
인스턴스가
. isin
은 단 하나의 쿼리에 대해서는 정상적으로 작동하지만 위의 맵/필터 콤보로 작성된 쿼리에 대한 개별 조회가 한 번이어서 Groupby
을 사용하여 상당한 속도 향상을 발견했습니다.
나는 overthought 가지가있을 수 있지만, 영업 이익은 데이터를 그룹화하는 이유을 한 것으로 가정했다. 나는 같은 선을 따라 갔다. +1 –
@ cᴏʟᴅsᴘᴇᴇᴅ, 예, OP가 무엇이 필요한지 아직 알지 못해요.하지만 groupby가 필요 없다고 느꼈습니다. – Vaishali