팬더를 사용하여 두 열 비교
이를 시작점으로 사용
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
처럼 보이는 것.
one two three
0 10 1.2 4.2
1 15 70 0.03
2 8 5 0
저는 어떤 것을 사용하고 싶습니다.if
판다 내의 진술.
if df['one'] >= df['two'] and df['one'] <= df['three']:
df['que'] = df['one']
기본적으로▁the▁via를 통해 각 행을 합니다.if
진술.
문서에서 사용하라고 합니다..all
하지만 예는 없습니다...
np를 사용할 수 있습니다.어디서. 만약에.cond
이며, "는 " " 입니다.A
그리고.B
그러면 어레이입니다.
C = np.where(cond, A, B)
를 C 다음같정다니의합게를과▁c와 합니다.A
cond
참다니입입니다.B
cond
거짓입니다.
import numpy as np
import pandas as pd
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
df['que'] = np.where((df['one'] >= df['two']) & (df['one'] <= df['three'])
, df['one'], np.nan)
수확량
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
조건이 둘 이상인 경우 np.select를 대신 사용할 수 있습니다.예를 들어, 당신이 원한다면,df['que']
df['two']
때에df['one'] < df['two']
,그리고나서
conditions = [
(df['one'] >= df['two']) & (df['one'] <= df['three']),
df['one'] < df['two']]
choices = [df['one'], df['two']]
df['que'] = np.select(conditions, choices, default=np.nan)
수확량
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 70
2 8 5 0 NaN
라고 가정할 수 있다면,df['one'] >= df['two']
때에df['one'] < df['two']
거짓일 경우, 조건과 선택은 다음과 같이 단순화될 수 있습니다.
conditions = [
df['one'] < df['two'],
df['one'] <= df['three']]
choices = [df['two'], df['one']]
( (이 경우에는) 이 아닐 수도 df['one']
또는df['two']
NaN 포함)
참고:
a = [['10', '1.2', '4.2'], ['15', '70', '0.03'], ['8', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
문자열 값으로 데이터 프레임을 정의합니다.숫자처럼 보이므로 이러한 문자열을 부동 소수점으로 변환하는 것이 좋습니다.
df2 = df.astype(float)
그러나 문자열은 문자별로 비교되는 반면 플로트는 숫자로 비교되므로 결과가 변경됩니다.
In [61]: '10' <= '4.2'
Out[61]: True
In [62]: 10 <= 4.2
Out[62]: False
사용할 수 있습니다..equals
열 또는 전체 데이터 프레임에 사용할 수 있습니다.
df['col1'].equals(df['col2'])
만약 둘이 같다면, 그 진술은 다시 돌아올 것입니다.True
,또 다른False
.
apply()를 사용하여 다음과 같은 작업을 수행할 수 있습니다.
df['que'] = df.apply(lambda x : x['one'] if x['one'] >= x['two'] and x['one'] <= x['three'] else "", axis=1)
또는 람다를 사용하지 않으려는 경우
def que(x):
if x['one'] >= x['two'] and x['one'] <= x['three']:
return x['one']
return ''
df['que'] = df.apply(que, axis=1)
입니다.df['one']
이것은 당신에게 새로운 열을 제공합니다.True
.df['one']
리고그고.False
은 가관은입니다.NaN
.
▁your▁given▁is다▁by▁just▁the▁boolean니에 의해 주어집니다.if
(사문할필있지만가요용)사▁it▁()를 사용해야 )&
에 and
):
>>> df['que'] = df['one'][(df['one'] >= df['two']) & (df['one'] <= df['three'])]
>>> df
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
만약 당신이 원한다면,NaN
은 값다른값수있습다니대할을 할 수 .fillna
열에 que
사용한 적이 있습니다.0
여기에 있는 빈 문자열 대신:
>>> df['que'] = df['que'].fillna(0)
>>> df
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 0
2 8 5 0 0
안에 , 각개조괄묶다은음로호별을 합니다.&
연산자를 사용하여 조건을 결합합니다.
df.loc[(df['one'] >= df['two']) & (df['one'] <= df['three']), 'que'] = df['one']
다음을 사용하여 일치하지 않는 행을 채울 수 있습니다.~
하여 일치 항목을 반전합니다.
df.loc[~ ((df['one'] >= df['two']) & (df['one'] <= df['three'])), 'que'] = ''
은 야합다니해를 사용해야 .&
그리고.~
and
그리고.not
&
그리고.~
연산자는 요소별로 작업합니다.
최종 결과:
df
Out[8]:
one two three que
0 10 1.2 4.2 10
1 15 70 0.03
2 8 5 0
다음과 같은 두 열의 값 평등을 비교하려는 사람들을 위해 이 답변을 추가하고 싶습니다.NaN
값, 및을 얻습니다.False
이 모두 두 값 이 두 일 때일 때NaN
에 따르면, 정에따르면의,,NaN
!=NaN
(참조: numpy.an(값)은 값 == numpy.nan?)과 동일하지 않습니다.
둘을 원한다면,NaN
수익률과의 비교True
사용할 수 있는 항목:
df['compare'] = (df["col_1"] == df["col_2"]) | (df["col_1"].isna() & df["col_2"].isna())
람다 식 사용:
df[df.apply(lambda x: x['col1'] != x['col2'], axis = 1)]
사용하다np.select
데이터 프레임에서 확인해야 할 조건이 여러 개 있고 다른 열에 특정 선택 항목을 출력하는 경우
conditions=[(condition1),(condition2)]
choices=["choice1","chocie2"]
df["new column"]=np.select=(condtion,choice,default=)
참고: 조건 없음과 선택지 없음이 일치해야 합니다. 두 가지 조건에 대해 동일한 선택지가 있는 경우 선택지에서 텍스트를 반복합니다.
다음 방법을 사용할 수 있습니다.
df['que'] = df['one'].where((df['one'] >= df['two']) & (df['one'] <= df['three']))
또는 방법:
df['que'] = df.loc[df.eval('(one >= two) & (two <= three)'), 'one']
결과:
one two three que
0 10 1.2 4.2 10
1 15 70 0.03 NaN
2 8 5 0 NaN
OP의 직관에 가장 가까운 것은 인라인 if 진술이라고 생각합니다.
df['que'] = (df['one'] if ((df['one'] >= df['two']) and (df['one'] <= df['three']))
두 개의 데이터 프레임 열에 있는 값을 비교하기 위해 여기에 온 경우eq()
:
df['one'].eq(df['two'])
또는eval()
df.eval("one == two")
그리고 만약 당신이 그것을 하나의 부울로 줄이고 싶다면, 전화하세요.all()
결과:
df['one'].eq(df['two']).all()
# or
df.eval("one == two").all()
이것은 다음보다 더 "강력한" 수표입니다.equals()
때문에equals()
True를 반환하려면 열 dtype도 일치해야 합니다.따라서 한 열이 dtype이면int
그리고 다른 하나는 d타입입니다.float
,equals()
값이 동일하더라도 False를 반환합니다. 반면eq().all()
/eval().all()
열을 요소별로 단순 비교합니다.
값이 된 경우합니다("NaN"이라는 ).NaN != NaN
):
df.eval("one == two or one != one").all()
< BB < 이기 에, OP질경우의인문의이, "A < B and B < C"므로,between()
:
cond = df['one'].between(df['two'], df['three'])
df['que'] = np.where(cond, df['one'], np.nan)
언급URL : https://stackoverflow.com/questions/27474921/compare-two-columns-using-pandas
'programing' 카테고리의 다른 글
Android에서 URL별 ImageView를 로드하는 방법은 무엇입니까? (0) | 2023.06.06 |
---|---|
데이터 목록과 함께 파이썬에서 Matplotlib을 사용하여 히스토그램을 그리는 방법은 무엇입니까? (0) | 2023.06.06 |
C 코드를 "멀티 스레드"하는 방법 (0) | 2023.06.06 |
워크벤치 ERP의 테이블에서 CHARRACHER SET 및 COLATE SET을 설정하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
C에서 파일 확장명을 가져오는 중 (0) | 2023.06.06 |