環境
- Python 3.8
- pandas 1.0.1
内容
pandasで、グループごとに行単位で比率を出したいです。
特に難しくはないのですが、コードの書き方に悩んでしまったので備忘録としてQiitaに記事を残します。
import pandas
df = pandas.DataFrame({
"name": ["Alice", "Bob","Carol", "Dave","Eve"],
"class": ["A", "A","A", "B", "B"],
"sex": ["F", "M","F", "M","F"],
"worktime": [1, 2,3, 4,5],
})
print(df)
# name class sex worktime
# 0 Alice A F 1
# 1 Bob A M 2
# 2 Carol A F 3
# 3 Dave B M 4
# 4 Eve B F 5
# "sex"ごとにworktimeの比率を算出
df["ratio_per_sex"] = df.groupby(["sex"])["worktime"].apply(lambda e: e / e.sum())
print(df.sort_values("sex"))
# name class sex worktime ratio_per_sex
# 0 Alice A F 1 0.111111
# 2 Carol A F 3 0.333333
# 4 Eve B F 5 0.555556
# 1 Bob A M 2 0.333333
# 3 Dave B M 4 0.666667
参考サイト
https://stackoverflow.com/questions/23377108/pandas-percentage-of-total-with-groupby
https://teratail.com/questions/229246