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 |
Tags
- 맛집
- PyQt
- 유니티
- node.js
- ubuntu
- swift
- pandas
- 날짜
- GIT
- 라즈베리파이
- PER
- mssql
- IOS
- 리눅스
- Excel
- tensorflow
- Linux
- port
- javascript
- flutter
- 다이어트
- sqlite
- MySQL
- python
- ASP
- Unity
- 함수
- MS-SQL
- PyQt5
- urllib
Archives
아미(아름다운미소)
b컬럼이 음수면 -1을 해당수만큼넣고 양수면 1을 해당수만큼 넣기 본문
import pandas as pd
# 예시 데이터프레임
grouped = pd.DataFrame({
'a': [...],
'b': [...],
'c': [...],
'd': [...],
'remainder': [...]
})
# 'remqainder_add' 컬럼 초기화
grouped['remqainder_add'] = 0
# 그룹별로 remainder의 값을 가져와서 fill_count 계산
grouped['fill_count'] = grouped.groupby(['a', 'b', 'c', 'd'])['remainder'].transform(lambda x: min(x.iloc[0], len(x)))
# 조건에 맞는 인덱스에 1로 업데이트
mask = grouped.index < grouped.groupby(['a', 'b', 'c', 'd']).cumcount() + grouped['fill_count']
grouped.loc[mask, 'remqainder_add'] = 1
# 불필요한 fill_count 컬럼 제거
grouped.drop(columns='fill_count', inplace=True)
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 컬럼 초기화
df['d'] = np.nan
# 각 그룹의 c 값에 따라 d 값을 설정
counts = df.groupby('a')['c'].transform('first')
# d 값을 초기화
df['d'] = np.where(counts > 0, 1, np.where(counts < 0, -1, np.nan))
# 그룹별 c의 절대값만큼 d 값 유지
group_sizes = df.groupby('a')['d'].transform(lambda x: x.cumsum().where(x.notnull()).ffill())
# c의 절대값에 따른 조건 설정
df['d'] = np.where(counts > 0, np.where(group_sizes <= counts, 1, np.nan), df['d'])
df['d'] = np.where(counts < 0, np.where(group_sizes <= -counts, -1, df['d']), df['d'])
# 결과 출력
print(df[['a', 'b', 'c', 'd']])
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 컬럼 초기화
df['d'] = np.nan
# 각 그룹별로 d 컬럼 채우기
for name, group in df.groupby('a'):
if not group.empty: # 그룹이 비어있지 않은지 체크
count = group['c'].iloc[0] # 첫 번째 행의 c 값을 가져옴
if count > 0:
fill_count = min(count, len(group)) # c 값과 그룹 길이 중 작은 값
df.loc[group.index[:fill_count], 'd'] = 1 # c가 양수일 경우 1로 채움
elif count < 0:
fill_count = min(abs(count), len(group)) # 절대값과 그룹 길이 중 작은 값
df.loc[group.index[:fill_count], 'd'] = -1 # c가 음수일 경우 -1로 채움
# 결과 출력
print(df[['a', 'b', 'c', 'd']])
import pandas as pd
import numpy as np
# 샘플 데이터 생성
data = {
'a': ['A'] * 6 + ['B'] * 6 + ['C'] * 6, # 각 카테고리마다 6개 데이터
'b': [10, 15, 10, -20, 5, 10, # A 카테고리
25, -30, 5, 20, 15, 10, # B 카테고리
10, 15, 20, 25, 30, 35], # C 카테고리
'c': [3, 3, 3, 3, 3, 3, # A 카테고리의 c 값 (항상 동일)
-3, -3, -3, -3, -3, -3, # B 카테고리
2, 2, 2, 2, 2, 2] # C 카테고리
}
# DataFrame 생성
df = pd.DataFrame(data)
# d 컬럼 생성: c 컬럼의 숫자에 따라 양수는 1, 음수는 -1로 채우기
def assign_values(group):
count = group['c'].iloc[0] # 첫 번째 행의 c 값을 가져옴
d_values = [np.nan] * len(group) # 그룹의 크기에 맞춰 NaN으로 초기화
if count > 0:
d_values[:count] = [1] * count # c가 양수일 경우 1로 채움
elif count < 0:
d_values[:abs(count)] = [-1] * abs(count) # c가 음수일 경우 -1로 채움
else:
d_values[:] = [0] * len(group) # c가 0일 경우 모든 값 0으로 채움
return pd.Series(d_values, index=group.index)
# 그룹별로 d 컬럼 할당
df['d'] = df.groupby('a').apply(assign_values).reset_index(drop=True)
# 결과 출력
print(df[['a', 'b', 'c', 'd']])
import pandas as pd
import numpy as np
# 예시 DataFrame 생성 (a 컬럼에 임의의 값이 들어있음)
data = {
'a': ['x', 'y', 'z', 'a', 'b', 'c'], # 임의의 값
'b': [3, 3, 3, 3, 3, 3] # b 컬럼의 값이 동일
}
df = pd.DataFrame(data)
# a 컬럼을 오름차순으로 정렬
df = df.sort_values(by='a').reset_index(drop=True)
# b 컬럼의 값 가져오기
if not df['b'].empty: # b 컬럼이 비어있지 않은 경우
b_value = df['b'].iloc[0] # b 컬럼의 첫 번째 값을 가져옴
else:
b_value = 0 # b 컬럼이 비어있으면 기본값 0으로 설정
# c 컬럼 생성
if b_value > 0:
c_values = [1] * b_value + [np.nan] * (len(df) - b_value) # 양수일 경우 1을 해당 수만큼
elif b_value < 0:
c_values = [-1] * abs(b_value) + [np.nan] * (len(df) - abs(b_value)) # 음수일 경우 -1을 해당 수만큼
else:
c_values = [np.nan] * len(df) # b가 0일 경우 모두 np.nan
# c 컬럼의 길이를 맞추기 위해 필요한 만큼 np.nan 추가
c_values.extend([np.nan] * (len(df) - len(c_values)))
# c 컬럼을 DataFrame에 추가
df['c'] = c_values[:len(df)] # c 컬럼 길이에 맞게 잘라서 추가
# 결과 출력
print(df)
'랭귀지 > pandas' 카테고리의 다른 글
값채우기 응용 (0) | 2024.08.13 |
---|---|
pandas 몫 나머지 (0) | 2024.08.13 |
pandas df와 df를 groupby sum한 a컬럼을 outer join하면 결과는? (0) | 2024.08.12 |
계산 후 join (0) | 2024.08.12 |
pandas df a,b,c,d groupby 후 e컬럼을 sum 한후e와 d값을 비교후 (e-d) 값을 f가 가장작은 row의 d값에 더해준다 (0) | 2024.08.07 |
Comments