판다의 콘캣 기능에서 '레벨', '키' 및 이름 인수는 무엇입니까?
문의사항
- 제가 어떻게 이용합니까
pd.concat
? - 무엇입니까?
levels
에 대한 논쟁? - 무엇입니까?
keys
에 대한 논쟁? - 모든 인수를 사용하는 방법을 설명하는 데 도움이 되는 많은 예가 있습니까?
판다스concat
기능은 병합 유틸리티의 스위스 육군 나이프입니다.그것이 유용한 다양한 상황들이 있습니다.기존 설명서에는 일부 선택적 인수에 대한 몇 가지 세부 정보가 생략되어 있습니다.그 중에는levels
그리고.keys
논쟁들.저는 그 주장들이 무엇을 하는지 알아내기 시작했습니다.
저는 여러 가지 측면에서 관문 역할을 할 질문을 제기할 것입니다.pd.concat
.
데이터 프레임 고려d1
,d2
,그리고.d3
:
import pandas as pd
d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), [2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), [1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), [1, 3])
만약 내가 이것들을 연결한다면,
pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'])
저는 기대한 결과를 얻습니다.pandas.MultiIndex
나로서는columns
객체:
A B C D
d1 2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
d2 1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
d3 1 0.7 0.8 NaN 0.9
3 0.7 0.8 NaN 0.9
그러나 인수 문서를 사용하고 싶었습니다.
수준: 시퀀스 목록, 기본값 없음.다중 인덱스를 구성하는 데 사용할 특정 수준(고유 값)입니다.그렇지 않으면 키에서 유추됩니다.
그래서 합격했습니다.
pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2']])
그리고.KeyError
ValueError: Key d3 not in level Index(['d1', 'd2'], dtype='object')
이게 말이 돼요.제가 통과한 레벨은 키로 표시된 필요한 레벨을 설명하기에 불충분했습니다.위에서 설명한 것처럼 아무것도 통과하지 못한 경우에는 수준이 추론됩니다(문서에 명시됨).하지만 더 나은 효과를 위해 이 주장을 어떻게 사용할 수 있을까요?
내가 대신 이것을 시도했다면:
pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2', 'd3']])
저는 위와 같은 결과를 얻었습니다.하지만 내가 레벨에 하나의 가치를 더하면,
df = pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2', 'd3', 'd4']])
결국 동일한 데이터 프레임이 생성되지만 결과적으로MultiIndex
사용되지 않는 수준이 있습니다.
df.index.levels[0]
Index(['d1', 'd2', 'd3', 'd4'], dtype='object')
그래서 무슨 의미가 있습니까?level
논쟁과 내가 사용해야 하는 것.keys
다르게?
저는 Python 3.6과 Pandas 0.22를 사용하고 있습니다.
이 질문에 직접 답하는 과정에서 저는 많은 것을 배웠고, 예시와 몇 가지 설명의 카탈로그를 만들고 싶었습니다.
요점에 대한 구체적인 답변.levels
논쟁은 끝을 향해 올 것입니다.
pandas.concat
사라진 설명서
개체 가져오기 및 정의
import pandas as pd
d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), index=[2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), index=[1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), index=[1, 3])
s1 = pd.Series([1, 2], index=[2, 3])
s2 = pd.Series([3, 4], index=[1, 2])
s3 = pd.Series([5, 6], index=[1, 3])
논쟁들
objs
우리가 마주치는 첫 번째 논쟁은 다음과 같습니다.
objs: Series, DataFrame 또는 Panel 객체의 시퀀스 또는 매핑 딕트가 전달되면 전달되지 않는 한 정렬된 키가 키 인수로 사용되며, 이 경우 값이 선택됩니다(아래 참조).모두 None이 아닌 경우 None 개체는 자동으로 삭제되며 이 경우 ValueError가 발생합니다.
- 일반적으로 다음 목록과 함께 사용됩니다.
Series
또는DataFrame
물건들. - 그것을 보여드리겠습니다.
dict
매우 유용할 수도 있습니다. - 할 수 , 할▁using▁when▁may▁gener▁useful를 사용할 때 유용할 수 있습니다.
map
에 있어서와 같이map(f, list_of_df)
일단, 우리는 몇 가지 목록을 가지고 있겠습니다.DataFrame
그리고.Series
위에 정의된 객체사전을 활용하여 매우 유용한 정보를 제공하는 방법을 보여드리겠습니다.MultiIndex
나중에 결과를 표시합니다.
pd.concat([d1, d2])
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
axis
우리가 마주치는 두 번째 인수는 누구의 기본값입니까?0
:
axis: {0/'index', 1/'columns', default 0 연결할 축입니다.
두DataFrame
에 로으.axis=0
(소리)
경 우의 0
또는index
"열을 따라 정렬하고 인덱스에 추가하십시오."라고 말합니다.
위에 표시된 바와 같이 사용한 장소axis=0
, 냐면왜0
다값이며인, 음의를확수인있의 할 수 .d2
의 인덱스를 확장합니다.d1
가치의 중복에도 불구하고.2
:
pd.concat([d1, d2], axis=0)
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
두DataFrame
에 로으.axis=1
by side음향)(音源的))
값 경 우의 경우1
또는columns
우리는 "인덱스를 따라 정렬하고 열에 추가하라"고 말합니다.
pd.concat([d1, d2], axis=1)
A B C B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
은 ▁from▁are▁we▁of▁and▁the▁extension다▁is▁the▁columns니있습▁the▁of수▁that▁the▁can▁see▁columns알▁union우▁resulting▁resulting▁index리▁indices장을확의 열 확장임을 알 수 있습니다.d1
의 d2
.
셋) 두또 (는세개개개)Series
와 함께axis=0
(소리)
을 할 때pandas.Series
를 따라서axis=0
우리는 a를 돌려받습니다.pandas.Series
결의이름의 Series
▁▁be 될 것입니다.None
전부가 아니라면Series
결합되는 것은 같은 이름을 가집니다. 하세요.'Name: A'
때.Series
그것이 존재하지 않을 때, 우리는 그것을 가정할 수 있습니다.Series
은 이은입니다None
.
| | | pd.concat(
| pd.concat( | pd.concat( | [s1.rename('A'),
pd.concat( | [s1.rename('A'), | [s1.rename('A'), | s2.rename('B'),
[s1, s2]) | s2]) | s2.rename('A')]) | s3.rename('A')])
-------------- | --------------------- | ---------------------- | ----------------------
2 1 | 2 1 | 2 1 | 2 1
3 2 | 3 2 | 3 2 | 3 2
1 3 | 1 3 | 1 3 | 1 3
2 4 | 2 4 | 2 4 | 2 4
dtype: int64 | dtype: int64 | Name: A, dtype: int64 | 1 5
| | | 3 6
| | | dtype: int64
셋) 두또 (는세개개개)Series
와 함께axis=1
by side음향)(音源的))
을 할 때pandas.Series
를 따라서axis=1
은 그은것입니다.name
으로 발생하는 열 하기 위해 입니다.pandas.DataFrame
.
| | pd.concat(
| pd.concat( | [s1.rename('X'),
pd.concat( | [s1.rename('X'), | s2.rename('Y'),
[s1, s2], axis=1) | s2], axis=1) | s3.rename('Z')], axis=1)
---------------------- | --------------------- | ------------------------------
0 1 | X 0 | X Y Z
1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 5.0
2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 NaN
3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN 6.0
혼된합Series
그리고.DataFrame
와 함께axis=0
(소리)
의 할 때Series
그리고.DataFrame
를 따라서axis=0
는 모든 두모변니다합을 합니다.Series
열 한로에DataFrame
s의
이는 다음과 같은 연결입니다.axis=0
즉, 열을 정렬하면서 인덱스(행)를 확장합니다.아래의 예에서, 우리는 지수가 다음과 같이 되는 것을 봅니다.[2, 3, 2, 3]
그것은 무차별적으로 색인을 추가하는 것입니다.열 이름을 강제로 지정하지 않으면 열이 겹치지 않습니다.Series
가 을하는칼인 열to_frame
:
pd.concat( |
[s1.to_frame(), d1]) | pd.concat([s1, d1])
------------------------- | ---------------------
0 A B C | 0 A B C
2 1.0 NaN NaN NaN | 2 1.0 NaN NaN NaN
3 2.0 NaN NaN NaN | 3 2.0 NaN NaN NaN
2 NaN 0.1 0.2 0.3 | 2 NaN 0.1 0.2 0.3
3 NaN 0.1 0.2 0.3 | 3 NaN 0.1 0.2 0.3
의 를 볼 수 .pd.concat([s1, d1])
마치 내가 그것을 수행한 것과 같습니다.to_frame
자신
그러나 다음과 같은 매개 변수를 사용하여 결과 열의 이름을 제어할 수 있습니다.to_frame
로 이름 Series
rename
방법이 결과의 열 이름을 제어하지 않습니다.DataFrame
.
# Effectively renames | |
# `s1` but does not align | # Does not rename. So | # Renames to something
# with columns in `d1` | # Pandas defaults to `0` | # that does align with `d1`
pd.concat( | pd.concat( | pd.concat(
[s1.to_frame('X'), d1]) | [s1.rename('X'), d1]) | [s1.to_frame('B'), d1])
---------------------------- | -------------------------- | ----------------------------
A B C X | 0 A B C | A B C
2 NaN NaN NaN 1.0 | 2 1.0 NaN NaN NaN | 2 NaN 1.0 NaN
3 NaN NaN NaN 2.0 | 3 2.0 NaN NaN NaN | 3 NaN 2.0 NaN
2 0.1 0.2 0.3 NaN | 2 NaN 0.1 0.2 0.3 | 2 0.1 0.2 0.3
3 0.1 0.2 0.3 NaN | 3 NaN 0.1 0.2 0.3 | 3 0.1 0.2 0.3
혼된합Series
그리고.DataFrame
와 함께axis=1
by side음향)(音源的))
이것은 꽤 직관적입니다.Series
name은 기본적으로 " 열같이다습다니"의 됩니다.Series
가 때객일 의 물체name
특성을 사용할 수 없습니다.
| pd.concat(
pd.concat( | [s1.rename('X'),
[s1, d1], | s2, s3, d1],
axis=1) | axis=1)
------------------- | -------------------------------
0 A B C | X 0 1 A B C
2 1 0.1 0.2 0.3 | 1 NaN 3.0 5.0 NaN NaN NaN
3 2 0.1 0.2 0.3 | 2 1.0 4.0 NaN 0.1 0.2 0.3
| 3 2.0 NaN 6.0 0.1 0.2 0.3
join
세 번째 인수는 결과 병합이 외부 병합(기본값)이어야 하는지 또는 내부 병합이어야 하는지를 설명하는 것입니다.
조인: {'join', 'join', 기본값 'join'
다른 축의 인덱스를 처리하는 방법입니다.
보니, 알보니, 없니다가 없습니다.left
또는right
으로 사용할 수 .pd.concat
병합할 개체를 두 개 이상 처리할 수 있습니다.
의 d1
그리고.d2
옵션은 다음과 같습니다.
outer
pd.concat([d1, d2], axis=1, join='outer')
A B C B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
inner
pd.concat([d1, d2], axis=1, join='inner')
A B C B C D
2 0.1 0.2 0.3 0.4 0.5 0.6
join_axes
네 번째 주장은 우리가 우리의 일을 할 수 있게 해주는 것입니다.left
합병 및 기타
join_axes: 인덱스 개체 목록
내부/외부 세트 로직을 수행하는 대신 다른 n - 1 축에 사용할 특정 인덱스.
왼쪽 병합
pd.concat([d1, d2, d3], axis=1, join_axes=[d1.index])
A B C B C D A B D
2 0.1 0.2 0.3 0.4 0.5 0.6 NaN NaN NaN
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
오른쪽 병합
pd.concat([d1, d2, d3], axis=1, join_axes=[d3.index])
A B C B C D A B D
1 NaN NaN NaN 0.4 0.5 0.6 0.7 0.8 0.9
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
ignore_index
ignore_index: 부울, 기본값 False
True인 경우 연결 축을 따라 인덱스 값을 사용하지 마십시오.결과 축에는 0, ..., n - 1 레이블이 지정됩니다.연결 축에 의미 있는 인덱싱 정보가 없는 개체를 연결하는 경우 유용합니다.다른 축의 인덱스 값은 조인 시에도 유지됩니다.
처럼 ㅠㅠㅠㅠㅠd1
d2
인덱스 값을 신경 쓰지 않으면 재설정하거나 무시할 수 있습니다.
| pd.concat( | pd.concat(
| [d1, d2], | [d1, d2]
pd.concat([d1, d2]) | ignore_index=True) | ).reset_index(drop=True)
--------------------- | ----------------------- | -------------------------
A B C D | A B C D | A B C D
2 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN | 0 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN | 1 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6 | 2 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6 | 3 NaN 0.4 0.5 0.6
그고사 때할용을 때.axis=1
:
| pd.concat(
| [d1, d2], axis=1,
pd.concat([d1, d2], axis=1) | ignore_index=True)
------------------------------- | -------------------------------
A B C B C D | 0 1 2 3 4 5
1 NaN NaN NaN 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN | 3 0.1 0.2 0.3 NaN NaN NaN
keys
해당 MultiIndex에 튜플 또는 스칼라 값을 할당하기 위해 스칼라 값 또는 튜플 목록을 전달할 수 있습니다.전달된 목록의 길이는 연결할 항목 수와 같아야 합니다.
키: 시퀀스, 기본값 없음
여러 수준을 통과한 경우 튜플을 포함해야 합니다.합니다.
axis=0
를 할 때Series
물는건옆에 있는 .axis=0
(인덱스 표시).
은, 그키은새초수기의의 이 됩니다.MultiIndex
개체가 인덱스 속성에 있습니다.
# length 3 length 3 # length 2 length 2
# /--------\ /-----------\ # /----\ /------\
pd.concat([s1, s2, s3], keys=['A', 'B', 'C']) pd.concat([s1, s2], keys=['A', 'B'])
---------------------------------------------- -------------------------------------
A 2 1 A 2 1
3 2 3 2
B 1 3 B 1 3
2 4 2 4
C 1 5 dtype: int64
3 6
dtype: int64
하지만, 우리는 스칼라 값 이상을 사용할 수 있습니다.keys
더 을 만들기 .MultiIndex
자, 지나가겠습니다.tuples
길이 2의 추가 a의 두 개의 새로운 레벨.MultiIndex
:
pd.concat(
[s1, s2, s3],
keys=[('A', 'X'), ('A', 'Y'), ('B', 'X')])
-----------------------------------------------
A X 2 1
3 2
Y 1 3
2 4
B X 1 5
3 6
dtype: int64
axis=1
열을 따라 확장할 때 약간 다릅니다.가 용할때를 했을 때.axis=0
) (으)의 (으)는keys
의 역할을 한MultiIndex
기존 인덱스에 추가된 수준.axis=1
우리는 축을 언급하고 있습니다.Series
것, 즉 는가있않습다니즉지지물, 체고,▁don▁objects,즉▁have.columns
기여하다.
Series
wtih
axis=1
이름을 지정합니다.s1
그리고.s2
keys
통과되지만 다음과 같은 경우 오버라이드됩니다.keys
통과했습니다.
| | | pd.concat(
| pd.concat( | pd.concat( | [s1.rename('U'),
pd.concat( | [s1, s2], | [s1.rename('U'), | s2.rename('V')],
[s1, s2], | axis=1, | s2.rename('V')], | axis=1,
axis=1) | keys=['X', 'Y']) | axis=1) | keys=['X', 'Y'])
-------------- | --------------------- | ---------------------- | ----------------------
0 1 | X Y | U V | X Y
1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0 | 1 NaN 3.0
2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0 | 2 1.0 4.0
3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN | 3 2.0 NaN
MultiIndex
with
Series
and
axis=1
pd.concat(
[s1, s2],
axis=1,
keys=[('W', 'X'), ('W', 'Y')])
-----------------------------------
W
X Y
1 NaN 3.0
2 1.0 4.0
3 2.0 NaN
Two
DataFrame
with
axis=1
그것과 마찬가지로.axis=0
예,keys
레을추니다합에 합니다.MultiIndex
에는 로.columns
기여하다.
pd.concat( | pd.concat(
[d1, d2], | [d1, d2],
axis=1, | axis=1,
keys=['X', 'Y']) | keys=[('First', 'X'), ('Second', 'X')])
------------------------------- | --------------------------------------------
X Y | First Second
A B C B C D | X X
1 NaN NaN NaN 0.4 0.5 0.6 | A B C B C D
2 0.1 0.2 0.3 0.4 0.5 0.6 | 1 NaN NaN NaN 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN | 2 0.1 0.2 0.3 0.4 0.5 0.6
| 3 0.1 0.2 0.3 NaN NaN NaN
Series
and
DataFrame
with
axis=1
이거 까다롭네요.이 경우 스칼라 키 값은 다음에 대한 유일한 인덱스 수준으로 작동할 수 없습니다.Series
번 수준 역 할 하 을 는 되 었 을 때 객 체 열 이 동 안 째 의 ▁when ▁while ▁object ▁it ▁column ▁a ▁of 객 체 ▁also ▁as 때 ▁level ▁acting ▁becomes ▁the ▁first ▁a 을 첫 번 었 되MultiIndex
를해위를 .DataFrame
그래서 판다들은 다시 사용할 것입니다.name
의 Series
개체를 열 이름의 원본으로 지정합니다.
pd.concat( | pd.concat(
[s1, d1], | [s1.rename('Z'), d1],
axis=1, | axis=1,
keys=['X', 'Y']) | keys=['X', 'Y'])
--------------------- | --------------------------
X Y | X Y
0 A B C | Z A B C
2 1 0.1 0.2 0.3 | 2 1 0.1 0.2 0.3
3 2 0.1 0.2 0.3 | 3 2 0.1 0.2 0.3
Limitations of
keys
and
MultiIndex
inferrence.
판다들은 단지 열 이름들을 유추하는 것 같습니다.Series
이름입니다. 그러나 열 수준 수가 다른 데이터 프레임 간에 유사한 연결을 수행할 때 빈칸을 채우지 않습니다.
d1_ = pd.concat(
[d1], axis=1,
keys=['One'])
d1_
One
A B C
2 0.1 0.2 0.3
3 0.1 0.2 0.3
그런 다음 이것을 열에 하나의 레벨만 있는 다른 데이터 프레임과 연결하면 Pandas는 튜플을 만드는 것을 거부할 것입니다.MultiIndex
개체, 스칼라 및 튜플의 단일 수준처럼 모든 데이터 프레임을 개체 및 결합할 수 있습니다.
pd.concat([d1_, d2], axis=1)
(One, A) (One, B) (One, C) B C D
1 NaN NaN NaN 0.4 0.5 0.6
2 0.1 0.2 0.3 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN NaN NaN
통과dict
신에대 list
사전을 건네줄 때,pandas.concat
의 키를 "" " " "로합니다.keys
명령어
# axis=0 | # axis=1
pd.concat( | pd.concat(
{0: d1, 1: d2}) | {0: d1, 1: d2}, axis=1)
----------------------- | -------------------------------
A B C D | 0 1
0 2 0.1 0.2 0.3 NaN | A B C B C D
3 0.1 0.2 0.3 NaN | 1 NaN NaN NaN 0.4 0.5 0.6
1 1 NaN 0.4 0.5 0.6 | 2 0.1 0.2 0.3 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
levels
은 이기은다함사용다니됩께능기과음능▁the다▁with▁used▁in와 함께 사용됩니다.keys
논쟁.언제levels
인 " 의기값유니다됩지로으본다니"로 유지됩니다.None
판다는 결과의 각 수준의 고유한 값을 취할 것입니다.MultiIndex
그리고 그것을 결과에 사용된 물체로 사용합니다.index.levels
기여하다.
수준: 시퀀스 목록, 기본값 없음
다중 인덱스를 구성하는 데 사용할 특정 수준(고유 값)입니다.그렇지 않으면 키에서 유추됩니다.
만약 판다들이 이미 이러한 수준이 무엇인지 추측한다면, 우리가 그것을 명시할 수 있는 어떤 이점이 있을까요?한 가지 예를 보여드리고 여러분이 이 방법이 유용한 다른 이유를 생각해 보도록 하겠습니다.
예
설서에따면르명,면,levels
인수는 시퀀스 목록입니다.이것은 우리가 다른 것을 사용할 수 있다는 것을 의미합니다.pandas.Index
그 결과 중 하나로.
프레임을 합니다.df
은 그이연것입다니된결것의 입니다.d1
,d2
그리고.d3
:
df = pd.concat(
[d1, d2, d3], axis=1,
keys=['First', 'Second', 'Fourth'])
df
First Second Fourth
A B C B C D A B D
1 NaN NaN NaN 0.4 0.5 0.6 0.7 0.8 0.9
2 0.1 0.2 0.3 0.4 0.5 0.6 NaN NaN NaN
3 0.1 0.2 0.3 NaN NaN NaN 0.7 0.8 0.9
열 개체의 수준은 다음과 같습니다.
print(df, *df.columns.levels, sep='\n')
Index(['First', 'Second', 'Fourth'], dtype='object')
Index(['A', 'B', 'C', 'D'], dtype='object')
사용할 경우sum
에.groupby
다음을 확인:
df.groupby(axis=1, level=0).sum()
First Fourth Second
1 0.0 2.4 1.5
2 0.6 0.0 1.5
3 0.6 2.4 0.0
하지만 만약에 대신에['First', 'Second', 'Fourth']
이름이 지정된 다른 누락된 범주가 있습니다.Third
그리고.Fifth
그리고 나는 그것들이 그 결과에 포함되기를 원했습니다.groupby
집계?만약 우리가 그것을 가지고 있다면 우리는 이것을 할 수 있습니다.pandas.CategoricalIndex
리고우그미지수있정다습니할리것을로 지정할 수 .levels
논쟁.
그래서 대신에, 정의해 봅시다.df
다음과 같이:
cats = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
lvl = pd.CategoricalIndex(cats, categories=cats, ordered=True)
df = pd.concat(
[d1, d2, d3], axis=1,
keys=['First', 'Second', 'Fourth'],
levels=[lvl]
)
df
First Fourth Second
1 0.0 2.4 1.5
2 0.6 0.0 1.5
3 0.6 2.4 0.0
그러나 열 개체의 첫 번째 수준은 다음과 같습니다.
df.columns.levels[0]
CategoricalIndex(
['First', 'Second', 'Third', 'Fourth', 'Fifth'],
categories=['First', 'Second', 'Third', 'Fourth', 'Fifth'],
ordered=True, dtype='category')
그리고 우리의groupby
합계는 다음과 같습니다.
df.groupby(axis=1, level=0).sum()
First Second Third Fourth Fifth
1 0.0 1.5 0.0 2.4 0.0
2 0.6 1.5 0.0 0.0 0.0
3 0.6 0.0 0.0 2.4 0.0
names
결과의 수준 이름을 지정하는 데 사용됩니다.MultiIndex
의 names
는 결과적으로 된 목은결수일합니의 .MultiIndex
.
이름: 목록, 기본값 없음
된 계층형 의
# axis=0 | # axis=1
pd.concat( | pd.concat(
[d1, d2], | [d1, d2],
keys=[0, 1], | axis=1, keys=[0, 1],
names=['lvl0', 'lvl1']) | names=['lvl0', 'lvl1'])
----------------------------- | ----------------------------------
A B C D | lvl0 0 1
lvl0 lvl1 | lvl1 A B C B C D
0 2 0.1 0.2 0.3 NaN | 1 NaN NaN NaN 0.4 0.5 0.6
3 0.1 0.2 0.3 NaN | 2 0.1 0.2 0.3 0.4 0.5 0.6
1 1 NaN 0.4 0.5 0.6 | 3 0.1 0.2 0.3 NaN NaN NaN
2 NaN 0.4 0.5 0.6 |
verify_integrity
자체 설명 문서
verify_integrity: 부울, 기본값 False
연결된 새 축에 중복 항목이 있는지 확인합니다.이는 실제 데이터 연결에 비해 매우 비용이 많이 들 수 있습니다.
연결된 인덱스가 생성되기 때문입니다.d1
그리고.d2
고유하지 않습니다. 무결성 검사에 실패합니다.
pd.concat([d1, d2])
A B C D
2 0.1 0.2 0.3 NaN
3 0.1 0.2 0.3 NaN
1 NaN 0.4 0.5 0.6
2 NaN 0.4 0.5 0.6
그리고.
pd.concat([d1, d2], verify_integrity=True)
> ValueError:인덱스에 겹치는 값이 있습니다. [2]
언급URL : https://stackoverflow.com/questions/49620538/what-are-the-levels-keys-and-names-arguments-for-in-pandas-concat-functio
'programing' 카테고리의 다른 글
St_Contains Polygon은 MySQL 8.0에서 결과의 일부를 반환합니다. (0) | 2023.07.24 |
---|---|
사용된 테이블 유형이 FULLTEXT 인덱스를 지원하지 않습니다(SQL: ALTER TABLE product_translations ADD FULLTEXT(이름)). (0) | 2023.07.24 |
libarclite_iphoneos.a 파일 누락(Xcode 14.3) (0) | 2023.07.24 |
mariadb의 JSON_SET에 있는 와일드카드 대안 (0) | 2023.07.24 |
SQL 화학: 날짜 필드를 필터링하는 방법은 무엇입니까? (0) | 2023.07.19 |