[PYTHON] 팬더 데이터 프레임에서 2 열의 값을 단일 열로 합치십시오.
PYTHON팬더 데이터 프레임에서 2 열의 값을 단일 열로 합치십시오.
나는 T-SQL에서 병합과 비슷한 동작을하는 메소드를 찾고있다. 팬더 데이터 프레임에 드문 드문 두 열 (열 A와 B)이 있습니다. 다음 규칙을 사용하여 새 열을 만들고 싶습니다.
앞에서 언급했듯이 이것은 coalesce 함수를 통해 MS SQL Server에서 수행 할 수 있습니다. 나는 이것을위한 좋은 pythonic 방법을 발견하지 못했다. 존재하나요?
해결법
-
==============================
1.combine_first () 사용 :
combine_first () 사용 :
In [16]: df = pd.DataFrame(np.random.randint(0, 10, size=(10, 2)), columns=list('ab')) In [17]: df.loc[::2, 'a'] = np.nan In [18]: df Out[18]: a b 0 NaN 0 1 5.0 5 2 NaN 8 3 2.0 8 4 NaN 3 5 9.0 4 6 NaN 7 7 2.0 0 8 NaN 6 9 2.0 5 In [19]: df['c'] = df.a.combine_first(df.b) In [20]: df Out[20]: a b c 0 NaN 0 0.0 1 5.0 5 5.0 2 NaN 8 8.0 3 2.0 8 2.0 4 NaN 3 3.0 5 9.0 4 9.0 6 NaN 7 7.0 7 2.0 0 2.0 8 NaN 6 6.0 9 2.0 5 2.0
-
==============================
2.이것을 사용해보십시오. 기억하기 쉽습니다.
이것을 사용해보십시오. 기억하기 쉽습니다.
df['c'] = np.where(df["a"].isnull(), df["b"], df["a"] )
df [ "c"] = np.where (df [ "a"]. isnull () == True, df [ "b"], df [ "a"])
%timeit df['d'] = df.a.combine_first(df.b) 1000 loops, best of 3: 472 µs per loop %timeit df['c'] = np.where(df["a"].isnull(), df["b"], df["a"] ) 1000 loops, best of 3: 291 µs per loop
-
==============================
3.combine_first는 가장 직접적인 옵션입니다. 아래에서 개략적으로 설명하는 몇 가지가 있습니다. 나는 몇 가지 해결책을 개략적으로 설명 할 것이고, 어떤 경우는 다른 경우에 적용 할 수있다.
combine_first는 가장 직접적인 옵션입니다. 아래에서 개략적으로 설명하는 몇 가지가 있습니다. 나는 몇 가지 해결책을 개략적으로 설명 할 것이고, 어떤 경우는 다른 경우에 적용 할 수있다.
모든 행에 NaN가있는 것은 아니고 이러한 NaN은 열간에 상호 배타적이지 않습니다.
설정
df a b 0 1.0 5.0 1 2.0 3.0 2 3.0 NaN 3 NaN 4.0 4 5.0 NaN 5 7.0 6.0 6 NaN 7.0
먼저에 결합하자.
옵션 1 pd.Series.mask
df.a.mask(pd.isnull, df.b)
또는,
df.a.mask(df.a.isnull(), df.b)
0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 5 7.0 6 7.0 Name: a, dtype: float64
옵션 2 pd.Series.where (Jon Clements에 의해 영감을 얻음)
df.a.where(pd.notnull, df.b) 0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 5 7.0 6 7.0 Name: a, dtype: float64
또는 b를 먼저 결합하여 주변 조건을 전환하십시오.
모든 행에는 열간에 상호 배타적 인 NaN가 있습니다.
설정
df a b 0 1.0 NaN 1 2.0 NaN 2 3.0 NaN 3 NaN 4.0 4 5.0 NaN 5 NaN 6.0 6 NaN 7.0
옵션 1 pd.Series.add
a.add(b, fill_value=0) 0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 5 6.0 6 7.0 dtype: float64
옵션 2 fillna + sum -
df.fillna(0).sum(1) 0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 5 6.0 6 7.0 dtype: float64
이것은 여러 컬럼으로 일반화하는 유일한 솔루션입니다 -
df.iloc[:, i:j].fillna(0).sum(1)
from https://stackoverflow.com/questions/38152389/coalesce-values-from-2-columns-into-a-single-column-in-a-pandas-dataframe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] cv2.waitKey (1)의 0xFF는 무엇입니까? (0) | 2018.11.13 |
---|---|
[PYTHON] 방향을 따르는 점들의 집합을 그룹화하는 알고리즘 (0) | 2018.11.13 |
[PYTHON] 파이썬 : 객체가 명명 된 튜플의 인스턴스인지 확인하는 방법은 무엇입니까? (0) | 2018.11.13 |
[PYTHON] Python Paramiko를 사용하여 SSH를 통해 명령 / 스크립트에 입력 / 변수 전달 (0) | 2018.11.13 |
[PYTHON] 멀티 인덱스로 팬더 DataFrame을 어떻게 이동합니까? (0) | 2018.11.13 |