아미(아름다운미소)

Pandas를 사용하여 `groupby`로 `a`, `b`, `c`, `d` 컬럼을 기준으로 그룹화한 후, `d` 컬럼이 모두 null이면 1/해당row수를 소수점5자리에서 반올림하기 본문

랭귀지/pandas

Pandas를 사용하여 `groupby`로 `a`, `b`, `c`, `d` 컬럼을 기준으로 그룹화한 후, `d` 컬럼이 모두 null이면 1/해당row수를 소수점5자리에서 반올림하기

유키공 2024. 8. 22. 14:17
import pandas as pd

# 예시 데이터프레임 생성
data = {
    'a': ['x', 'x', 'y', 'y', 'x'],
    'b': [1, 1, 2, 2, 1],
    'c': ['foo', 'foo', 'bar', 'bar', 'foo'],
    'd': [10, 10, 20, 20, 10],
    'e': [5, 15, 10, 20, 25]
}

df = pd.DataFrame(data)

# 그룹화 후 e 컬럼의 합계와 행 수 계산
result = df.groupby(['a', 'b', 'c', 'd']).agg(
    e_sum=('e', 'sum'),
    row_count=('e', 'count')
).reset_index()

print(result)
import pandas as pd

# 예시 데이터프레임 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C', 'C'],
    'b': ['X', 'X', 'Y', 'Y', 'Z', 'Z'],
    'c': ['M', 'M', 'N', 'N', 'O', 'O'],
    'd': [None, None, 1, None, None, None]  # None은 NaN으로 취급됨
}
df = pd.DataFrame(data)

# d 컬럼을 float으로 변환 (이 경우 None은 NaN으로 변환됨)
df['d'] = df['d'].astype(float)

# 그룹화하여 d 컬럼이 모두 null인 그룹 찾기
grouped = df.groupby(['a', 'b', 'c'])

# 각 그룹에 대해 d 컬럼이 모두 null인지 확인하고, 해당 그룹의 총 행 수에 대한 역수 계산
result = []
for name, group in grouped:
    if group['d'].isnull().all():
        total_rows = len(group)
        inverse_value = round(1 / total_rows, 5)  # 1/총 행 수 후 소수점 5자리에서 반올림
        result.append({'group': name, 'inverse': inverse_value})

# 결과를 데이터프레임으로 변환
inverse_df = pd.DataFrame(result)

# 결과 확인
print(inverse_df)
import pandas as pd
import numpy as np

# 예시 데이터프레임 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C', 'C'],
    'b': ['X', 'X', 'Y', 'Y', 'Z', 'Z'],
    'c': ['M', 'M', 'N', 'N', 'O', 'O'],
    'd': [None, None, 1, None, None, None]  # None은 NaN으로 취급됨
}
df = pd.DataFrame(data)

# d 컬럼을 float으로 변환 (이 경우 None은 NaN으로 변환됨)
df['d'] = df['d'].astype(float)

# 그룹화하여 d 컬럼이 모두 null인 그룹 찾기
null_groups = df.groupby(['a', 'b', 'c'])['d'].apply(lambda x: x.isnull().all())

# null인 그룹의 총 행 수를 계산
group_sizes = df.groupby(['a', 'b', 'c']).size()

# d가 모두 null인 그룹의 행 수에 대한 역수 계산 및 반올림
inverse_values = null_groups[null_groups].index.to_frame(index=False)
inverse_values['inverse'] = (1 / group_sizes[inverse_values.set_index(['a', 'b', 'c']).index]).round(5)

# 결과 확인
print(inverse_values)
import pandas as pd
import numpy as np

# 예시 데이터프레임 생성
data = {
    'a': ['A', 'A', 'B', 'B', 'C', 'C'],
    'b': ['X', 'X', 'Y', 'Y', 'Z', 'Z'],
    'c': ['M', 'M', 'N', 'N', 'O', 'O'],
    'd': [None, None, 1, None, None, None]
}
df = pd.DataFrame(data)

# 그룹화 및 d컬럼이 모두 null인 그룹 찾기
null_groups = df.groupby(['a', 'b', 'c'])['d'].apply(lambda x: x.isnull().all())

# null인 그룹의 행 수를 계산
group_sizes = df.groupby(['a', 'b', 'c']).size()

# d가 모두 null인 그룹의 행 수에 대한 역수 계산 및 반올림
inverse_values = null_groups[null_groups].index.to_frame(index=False)
inverse_values['inverse'] = (1 / group_sizes[inverse_values.set_index(['a', 'b', 'c']).index]).round(5)

# 결과 확인
print(inverse_values)
Comments