팬더 데이터프레임을 녹이는 방법은 무엇입니까?
pandas 태그에서 pandas의 데이터 프레임 녹는 것에 대해 질문하는 사용자를 자주 봅니다. 나는 이 주제에 대해 표준적인 Q&A(자체 답변)를 하려고 노력할 것입니다.
명확하게 말씀드리고 싶은 점:
-
멜팅이란 무엇인가요?
-
멜트는 어떻게 사용하나요?
-
멜트는 언제 사용하나요?
녹는 것에 관해 다음과 같은 인기 있는 질문을 보았습니다.
-
팬더를 사용하여 열을 행으로 변환: 이것은 실제로 좋을 수도 있지만 더 많은 설명이 있으면 좋을 것입니다.
-
pandas 용해 기능: 좋은 답변이 포함된 좋은 질문이지만 별다른 설명이 없어 너무 모호합니다.
-
Melting pandas dataframe: 역시 훌륭한 답변입니다! 하지만 그것은 단지 특정한 경우에 대한 것일 뿐이고 간단합니다.
pd.melt(df)
-
열을 행으로 사용하는 pandas 데이터 프레임(녹음) : 매우 깔끔합니다! 하지만 문제는
pivot_table
를 사용해야 하는 OP의 특정 질문만 다룬다는 것입니다.
그래서 저는 이 주제에 대한 정식 Q&A를 시도해 보겠습니다.
데이터세트:
나는 무작위 연령의 무작위 사람들을 대상으로 한 무작위 성적 데이터 세트에서 모든 답을 찾을 것입니다(답을 설명하기 더 쉽습니다 :d):
으아아아 으아아아질문:
질문 1:
원래 데이터프레임이 다음과 같이 되도록 데이터프레임을 녹이는 방법은 무엇인가요?
으아아아한 열은 과목별로, 다른 열은 학생의 나이, 점수와 함께 반복되는 이름으로 바꾸려고 합니다.
질문 2:
질문 1과 비슷하지만 이번에는 질문 1을 subject
列只有math
,我想过滤掉english
열:
위와 같은 출력을 원합니다.
질문 3:
멜트를 그룹화하고 학생들의 점수에 따라 정렬한다면 다음과 같이 원하는 결과를 얻으려면 어떻게 해야 할까요?
으아아아쉼표로 구분된 이름과 쉼표로 구분된 subjects
를 각각 같은 순서로 정렬해야 합니다.
질문 4:
용해된 데이터프레임을 어떻게 고정 해제 하나요? 이 데이터프레임을 녹였다고 가정해 보겠습니다.
으아아아되기:
으아아아그렇다면 아래와 같이 원래 데이터 프레임으로 다시 변환하려면 어떻게 해야 할까요?
으아아아질문 5:
학생들을 이름별로 그룹화하고 과목과 성적을 쉼표로 구분하고 싶다면 어떻게 해야 하나요?
으아아아저는 위와 같은 데이터프레임을 원합니다.
질문 6:
모든 열을 값으로 포함하여 데이터프레임을 완전히 녹인다면 어떻게 해야 합니까?
으아아아저는 위와 같은 데이터프레임을 원합니다. 모든 열은 값입니다.
정답
Pandas 버전 < 0.20.0 에 대한 참고 사항: 대신 df.melt(...)
作为我的示例,但您需要使用 pd.melt(df, .. .)
을 사용하겠습니다.
문서 참조:
여기에 있는 대부분의 솔루션은 melt
,所以要知道方法melt
에서 작동하므로 방법을 알아보려면
을 참조하세요.
녹는 논리:
- Melting은 여러 열을 병합하고 데이터프레임을 넓은 것에서 긴 것으로 변환하고 문제 1을 해결합니다(아래 참조).
-
-
math
和english
열을 먼저 병합하고 데이터 프레임을 복제합니다(더 길게). -
subject
列,它分别是grades
테마를 추가합니다.
melt
함수의 간단한 논리입니다.
해결책:
질문 1:
pd.dataframe.melt
문제 1은 다음 코드를 사용하여
을 사용하여 해결할 수 있습니다. id_vars
参数传递给 ['name', 'age']
,然后自动将 value_vars
设置为其他列(['math', 'english']
으아아아
)를 다음 형식으로 변환합니다.
stack
아래와 같이 解决问题 1 >
을 사용할 수도 있습니다. name
和 age
列设置为索引,并堆叠其余列 math
和 english
,并重置索引并指定 grade
作为列名称,然后将其他列重命名为 level_2phpcnendcphp cn 到 <code>subject
然后按subject
으아아아
name
및 age
열을 인덱스로 설정하고 나머지 열을 쌓고 인덱스를 재설정하고 grade
를 열 이름으로 지정합니다. 그런 다음 다른 열의 이름을 level_2phpcnendcphp cn to <code>subject
로 바꾼 다음 subject
열을 누르고 마지막으로 색인을 다시 재설정하세요.
name age subject grade 0 bob 13 english c 1 john 16 english b 2 foo 16 english b 3 bar 15 english a+ 4 alex 17 english f 5 tom 12 english a 6 bob 13 math a+ 7 john 16 math b 8 foo 16 math a 9 bar 15 math f 10 alex 17 math d 11 tom 12 math c
问题 2:
这和我的第一个问题类似,但是这个我只在 math
列中进行过滤,这时候 value_vars
参数就可以派上用场了,如下所示:
print( df.melt( id_vars=["name", "age"], value_vars="math", var_name="subject", value_name="grades", ) )
或者我们也可以使用 stack
与列规格:
print( df.set_index(["name", "age"])[["math"]] .stack() .reset_index(name="grade") .rename(columns={"level_2": "subject"}) .sort_values("subject") .reset_index(drop=true) )
这两种解决方案都给出:
name age subject grade 0 bob 13 math a+ 1 john 16 math b 2 foo 16 math a 3 bar 15 math f 4 alex 15 math d 5 tom 13 math c
问题 3:
问题3可以通过melt
解决和 groupby
,使用 agg
函数和 ' , '.join
,如下所示:
print( df.melt(id_vars=["name", "age"]) .groupby("value", as_index=false) .agg(", ".join) )
它会融合数据框,然后按等级进行分组,聚合它们并用逗号将它们连接起来。
stack
也可以用来解决这个问题,与 stack
和 groupby
如下所示:
print( df.set_index(["name", "age"]) .stack() .reset_index() .rename(columns={"level_2": "subjects", 0: "grade"}) .groupby("grade", as_index=false) .agg(", ".join) )
这个 stack
函数只是转置数据帧以相当于 melt
的方式,然后重置索引,重命名列、组和聚合。
两种解决方案输出:
grade name subjects 0 a foo, tom math, english 1 a+ bob, bar math, english 2 b john, john, foo math, english, english 3 c bob, tom english, math 4 d alex math 5 f bar, alex math, english
问题 4:
这可以通过 pivot_table
来解决。我们必须指定参数 values
、index
、columns
以及 aggfunc
。
我们可以用下面的代码来解决这个问题:
print( df.pivot_table("grades", ["name", "age"], "subject", aggfunc="first") .reset_index() .rename_axis(columns=none) )
输出:
name age english math 0 alex 15 f d 1 bar 15 a+ f 2 bob 13 c a+ 3 foo 16 b a 4 john 16 b b 5 tom 13 a c
融化的数据帧被转换回与原始数据帧完全相同的格式。
我们首先旋转融化的数据框,然后重置索引并删除列轴名称。
问题 5:
print( df.melt(id_vars=["name", "age"], var_name="subject", value_name="grades") .groupby("name", as_index=false) .agg(", ".join) )
融化并按 name
分组。
或者您可以stack
: p>
print( df.set_index(["name", "age"]) .stack() .reset_index() .groupby("name", as_index=false) .agg(", ".join) .rename({"level_2": "subjects", 0: "grades"}, axis=1) )
两个代码输出:
name subjects grades 0 alex math, english d, f 1 bar math, english f, a+ 2 bob math, english a+, c 3 foo math, english a, b 4 john math, english b, b 5 tom math, english c, a
问题 6:
问题6可以通过melt
解决并且不需要指定列,只需指定预期的列名称:
print(df.melt(var_name='column', value_name='value'))
这会融化整个数据框。
或者您可以stack
: p>
print( df.stack() .reset_index(level=1) .sort_values("level_1") .reset_index(drop=true) .set_axis(["column", "value"], axis=1) )
两个代码输出:
Column Value 0 Age 16 1 Age 15 2 Age 15 3 Age 16 4 Age 13 5 Age 13 6 English A+ 7 English B 8 English B 9 English A 10 English F 11 English C 12 Math C 13 Math A+ 14 Math D 15 Math B 16 Math F 17 Math A 18 Name Alex 19 Name Bar 20 Name Tom 21 Name Foo 22 Name John 23 Name Bob
위 내용은 팬더 데이터프레임을 녹이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...
