아미(아름다운미소)

값채우기 응용 본문

랭귀지/pandas

값채우기 응용

유키공 2024. 8. 13. 20:16
import pandas as pd
import numpy as np

# 샘플 데이터 생성
data = {
    'a': ['A'] * 6 + ['B'] * 6 + ['C'] * 6,
    'b': [202411, 202412, 202413, 202414, 202415, 202416,
          202411, 202412, 202413, 202414, 202415, 202416,
          202428, 202429, 202431, 202432, 202433, 202434],
    'c': [3] * 18
}

# DataFrame 생성
df = pd.DataFrame(data)

# b 컬럼으로 정렬
df.sort_values(by='b', inplace=True)

# d 컬럼 생성
def assign_values(group):
    count = group['c'].iloc[0]
    d_values = [1] * count + [np.nan] * (len(group) - count)
    return pd.Series(d_values, index=group.index)

# 그룹별로 d 컬럼 할당 (여기서 'a'와 'b'를 그룹화)
d_series = df.groupby(['a', 'b'], group_keys=False).apply(assign_values)
df['d'] = d_series

# 결과를 b의 적은 값 순으로 정렬
df.sort_values(by=['a', 'b'], inplace=True)

# 인덱스 초기화
df.reset_index(drop=True, inplace=True)

# 결과 출력
print(df[['a', 'b', 'c', 'd']])

예제

import pandas as pd
import numpy as np

# 샘플 데이터 생성
data = {
    'a': ['A'] * 6 + ['B'] * 6 + ['C'] * 6,
    'b': [202411, 202412, 202413, 202414, 202415, 202416,
          202411, 202412, 202413, 202414, 202415, 202416,
          202428, 202429, 202431, 202432, 202433, 202434],
    'c': [3] * 18
}

# DataFrame 생성
df = pd.DataFrame(data)

# b 컬럼으로 정렬
df.sort_values(by='b', inplace=True)

# d 컬럼 생성
def assign_values(group):
    count = group['c'].iloc[0]
    d_values = [1] * count + [np.nan] * (len(group) - count)
    return pd.Series(d_values, index=group.index)

# 그룹별로 d 컬럼 할당
d_series = df.groupby('a', group_keys=False).apply(assign_values)
df['d'] = d_series

# 결과를 b의 적은 값 순으로 정렬
df.sort_values(by=['a', 'b'], inplace=True)

# 인덱스 초기화
df.reset_index(drop=True, inplace=True)

# 결과 출력
print(df[['a', 'b', 'c', 'd']])
Comments