판다를 사용하여 둘 이상의 최대 열 찾기
열이 있는 데이터 프레임이 있습니다.A,B열을 만들어야 합니다.C모든 레코드/행에 대해 다음과 같이 설정합니다.
C = max(A, B).
어떻게 하면 좋을까요?
다음과 같은 최대값을 얻을 수 있습니다.
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
>>> df
A B
0 1 -2
1 2 8
2 3 1
>>> df[["A", "B"]]
A B
0 1 -2
1 2 8
2 3 1
>>> df[["A", "B"]].max(axis=1)
0 1
1 8
2 3
그래서:
>>> df["C"] = df[["A", "B"]].max(axis=1)
>>> df
A B C
0 1 -2 1
1 2 8 8
2 3 1 3
만약 당신이 "A"와 "B"가 유일한 열이라는 것을 안다면, 당신은 심지어 도망칠 수 있습니다.
>>> df["C"] = df.max(axis=1)
그리고 당신은 사용할 수 있습니다..apply(max, axis=1)제 생각에, 제가봐요.
@DSM의 대답은 거의 모든 일반 시나리오에서 완벽하게 좋습니다.그러나 만약 당신이 표면 레벨보다 조금 더 깊이 들어가고 싶어하는 타입의 프로그래머라면, 당신은 기본적으로 numpy 함수를 호출하는 것이 조금 더 빠르다는 것을 알고 싶을 것입니다..values<0.24) 어레이의 경우 DataFrame/Series 개체에 정의된 (사이톤화된) 함수를 직접 호출하는 대신 사용할 수 있습니다.
예를 들어 첫 번째 축을 따라 사용할 수 있습니다.
# Data borrowed from @DSM's post.
df = pd.DataFrame({"A": [1,2,3], "B": [-2, 8, 1]})
df
A B
0 1 -2
1 2 8
2 3 1
df['C'] = df[['A', 'B']].values.max(1)
# Or, assuming "A" and "B" are the only columns,
# df['C'] = df.values.max(1)
df
A B C
0 1 -2 1
1 2 8 8
2 3 1 3
데이터가 다음과 같은 경우NaNs, 다음이 필요합니다.
df['C'] = np.nanmax(df.values, axis=1)
df
A B C
0 1 -2 1
1 2 8 8
2 3 1 3
사용할 수도 있습니다.numpy.maximum.reduce는numpy.maximum ufunc(범용 함수)이며, 모든 ufunc에는 다음이 있습니다.
df['C'] = np.maximum.reduce(df['A', 'B']].values, axis=1)
# df['C'] = np.maximum.reduce(df[['A', 'B']], axis=1)
# df['C'] = np.maximum.reduce(df, axis=1)
df
A B C
0 1 -2 1
1 2 8 8
2 3 1 3
np.maximum.reduce그리고.np.max(대부분의 일반적인 크기의 데이터 프레임에 대해) 거의 동일한 것으로 보이며 보다 약간 빠른 속도를 보입니다.DataFrame.max이 차이는 대략 일정하게 유지되며 내부 오버헤드(인덱스 정렬, NaN 처리 등) 때문이라고 생각합니다.
그래프는 성능 그림을 사용하여 생성되었습니다.참조용 벤치마킹 코드:
import pandas as pd
import perfplot
np.random.seed(0)
df_ = pd.DataFrame(np.random.randn(5, 1000))
perfplot.show(
setup=lambda n: pd.concat([df_] * n, ignore_index=True),
kernels=[
lambda df: df.assign(new=df.max(axis=1)),
lambda df: df.assign(new=df.values.max(1)),
lambda df: df.assign(new=np.nanmax(df.values, axis=1)),
lambda df: df.assign(new=np.maximum.reduce(df.values, axis=1)),
],
labels=['df.max', 'np.max', 'np.maximum.reduce', 'np.nanmax'],
n_range=[2**k for k in range(0, 15)],
xlabel='N (* len(df))',
logx=True,
logy=True)
여러 열에서 최대값을 찾는 경우:
df[['A','B']].max(axis=1).max(axis=0)
예:
df =
A B
timestamp
2019-11-20 07:00:16 14.037880 15.217879
2019-11-20 07:01:03 14.515359 15.878632
2019-11-20 07:01:33 15.056502 16.309152
2019-11-20 07:02:03 15.533981 16.740607
2019-11-20 07:02:34 17.221073 17.195145
print(df[['A','B']].max(axis=1).max(axis=0))
17.221073
언급URL : https://stackoverflow.com/questions/12169170/find-the-max-of-two-or-more-columns-with-pandas
'programing' 카테고리의 다른 글
| 장고 쿼리 세트를 딕트 목록으로 변환하려면 어떻게 해야 합니까? (0) | 2023.07.06 |
|---|---|
| Angular 응용 프로그램에서 Puppeteer를 사용하는 방법 (0) | 2023.07.06 |
| exec(@sql)에서 값 반환 (0) | 2023.07.06 |
| 두 개의 다른 막대 열의 연결을 나타내는 열 추가 (0) | 2023.07.06 |
| VBA에서 사용되지 않는 변수를 알 수 있는 방법이 있습니까? (0) | 2023.07.06 |
