이 솔루션은 구현 측면에서 더 해킹 적이지만 사용법 측면에서 훨씬 깨끗하며 다른 솔루션보다 더 일반적입니다.
https://github.com/toobaz/generic_utils/blob/master/generic_utils/pandas/where.py
전체 저장소를 다운로드 할 필요가 없습니다 : 파일 저장 및 수행
from where import where as W
충분해야합니다. 그런 다음 다음과 같이 사용하십시오.
df = pd.DataFrame([[1, 2, True],
[3, 4, False],
[5, 7, True]],
index=range(3), columns=['a', 'b', 'c'])
# On specific column:
print(df.loc[W['a'] > 2])
print(df.loc[-W['a'] == W['b']])
print(df.loc[~W['c']])
# On entire - or subset of a - DataFrame:
print(df.loc[W.sum(axis=1) > 3])
print(df.loc[W[['a', 'b']].diff(axis=1)['b'] > 1])
약간 덜 어리석은 사용법 예제 :
data = pd.read_csv('ugly_db.csv').loc[~(W == '$null$').any(axis=1)]
그건 그렇고 : 부울 열을 사용하는 경우에도,
df.loc[W['cond1']].loc[W['cond2']]
보다 더 효율적일 수있다
df.loc[W['cond1'] & W['cond2']]
이 평가되므로 cond2
경우에만 cond1
입니다True
.
면책 조항 : 나는 이것을 보지 못했기 때문에이 답변을 다른 곳에서 처음으로 주었다 .
df.query
그리고pd.eval
이 사용 사례에 대한 좋은 맞는 것처럼 보인다.pd.eval()
함수 계열, 기능 및 사용 사례 에 대한 자세한 내용은 pd.eval ()을 사용하여 팬더의 Dynamic Expression Evaluation을 방문하십시오 .