Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ubuntu
- javascript
- MySQL
- ASP
- Excel
- PER
- 라즈베리파이
- sqlite
- 맛집
- Linux
- 유니티
- pandas
- Unity
- tensorflow
- 리눅스
- mssql
- node.js
- 함수
- swift
- PyQt
- MS-SQL
- urllib
- PyQt5
- IOS
- python
- port
- 날짜
- GIT
- 다이어트
- flutter
Archives
아미(아름다운미소)
특정열이 1보다큰경우 fillcount 본문
import pandas as pd
import numpy as np
# 샘플 데이터 생성
data = {
'a': ['A'] * 6 + ['B'] * 6 + ['C'] * 6,
'b': [10, 15, 10, -20, 5, 10,
25, -30, 5, 20, 15, 10,
10, 15, 20, 25, 30, 35],
'c': [3, 3, 3, 3, 3, 3,
-3, -3, -3, -3, -3, -3,
2, 2, 2, 2, 2, 2]
}
# DataFrame 생성
df = pd.DataFrame(data)
# d 컬럼과 e 컬럼 초기화
df['d'] = np.nan
df['e'] = np.random.randint(-5, 10, size=len(df)) # e 컬럼에 랜덤 값 추가
# 각 그룹별로 d 컬럼 채우기
for name, group in df.groupby('a'):
if not group.empty: # 그룹이 비어있지 않은지 체크
count = group['c'].iloc[0] # 첫 번째 행의 c 값을 가져옴
# e 컬럼이 0보다 큰 행에 대한 boolean 인덱스 생성
positive_e_rows = group['e'] > 0
if count > 0:
fill_count = min(count, positive_e_rows.sum()) # c 값과 양수 e 행의 개수 중 작은 값
df.loc[group[positive_e_rows].index[:fill_count], 'd'] = 1 # c가 양수일 경우 1로 채움
elif count < 0:
fill_count = min(abs(count), positive_e_rows.sum()) # 절대값과 양수 e 행의 개수 중 작은 값
df.loc[group[positive_e_rows].index[:fill_count], 'd'] = -1 # c가 음수일 경우 -1로 채움
# 결과 출력
print(df[['a', 'b', 'c', 'd', 'e']])
import pandas as pd
import numpy as np
# 샘플 데이터 생성
data = {
'a': ['A'] * 6 + ['B'] * 6 + ['C'] * 6,
'b': [10, 15, 10, -20, 5, 10,
25, -30, 5, 20, 15, 10,
10, 15, 20, 25, 30, 35],
'c': [3, 3, 3, 3, 3, 3,
-3, -3, -3, -3, -3, -3,
2, 2, 2, 2, 2, 2]
}
# DataFrame 생성
df = pd.DataFrame(data)
# d 컬럼과 e 컬럼 초기화
df['d'] = np.nan
df['e'] = np.random.randint(-5, 10, size=len(df)) # e 컬럼에 랜덤 값 추가
# 각 그룹별로 d 컬럼 채우기
for name, group in df.groupby('a'):
if not group.empty: # 그룹이 비어있지 않은지 체크
count = group['c'].iloc[0] # 첫 번째 행의 c 값을 가져옴
# e 컬럼이 0보다 큰 행만 처리
positive_e_rows = group[group['e'] > 0]
if count > 0:
fill_count = min(count, len(positive_e_rows)) # c 값과 양수 e 행의 길이 중 작은 값
df.loc[positive_e_rows.index[:fill_count], 'd'] = 1 # c가 양수일 경우 1로 채움
elif count < 0:
fill_count = min(abs(count), len(positive_e_rows)) # 절대값과 양수 e 행의 길이 중 작은 값
df.loc[positive_e_rows.index[:fill_count], 'd'] = -1 # c가 음수일 경우 -1로 채움
# 결과 출력
print(df[['a', 'b', 'c', 'd', 'e']])
'랭귀지 > pandas' 카테고리의 다른 글
Pandas에서 `concat`을 사용할 때 값이 있는 데이터프레임이 있는데 결과가 0으로출력 (0) | 2024.08.28 |
---|---|
pandas transform (0) | 2024.08.28 |
df 의 a컬럼값과 df2의 a,b,c,d groupby sum e의 값이 같은지 검증하는방법 (0) | 2024.08.26 |
pandas a,b 값의 나눈값과 나머지를 구하고 나눈값이 음수이면 나머지를 음수로 양수면 나머지를 양수 (0) | 2024.08.23 |
pandas sum,count,몫,나머지 구하기 (0) | 2024.08.22 |
Comments