gpt4 book ai didi

python - 比例/百分比值

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:51 27 4
gpt4 key购买 nike

我有这个数据框:

o   d   r   kz  p
1 3 1 5 NaN
1 3 2 0 NaN
1 10 1 7 NaN
1 10 3 1 NaN
1 10 2 2 NaN

我想用每对“o”和“d”的“kz”值的比例填充“p”列。结果应该是这样的:

o   d   r   kz  p
1 3 1 5 100%
1 3 2 0 0%
1 10 1 7 70%
1 10 3 1 10%
1 10 2 2 20%

我正在考虑遍历数据框并分配一个 kz 值列表列表,然后递归填充 p 列。

是否有任何优雅的方式来做到这一点,例如使用 groupbyPivot 表?

最佳答案

您可以分几步完成:

  • 使用 groupby 计算每组的总和 (doc)agg (doc) .
  • 使用 merge 将这些值与您当前的数据框合并 (doc) .
  • 计算比率

这里是代码:

# Import modules
import pandas as pd
import numpy as np

# Data
df = pd.DataFrame(
[[1, 3, 1, 5, np.NaN],
[1, 3, 2, 0, np.NaN],
[1, 10, 1, 7, np.NaN],
[1, 10, 3, 1, np.NaN],
[1, 10, 2, 2, np.NaN]],
columns=["o", "d", "r", "kz", "p"])
print(df)
# o d r kz p
# 0 1 3 1 5 NaN
# 1 1 3 2 0 NaN
# 2 1 10 1 7 NaN
# 3 1 10 3 1 NaN
# 4 1 10 2 2 NaN

# Compute the sum per group
sum_ = df.groupby(['o', 'd']).agg({'kz': 'sum'})
sum_.reset_index(inplace=True)
print(sum_)
# o d kz
# 0 1 3 5
# 1 1 10 10

# Merge these values with the current dataframe
df = df.merge(sum_, on=['o', 'd'], how="outer", suffixes=('', '_sum'))
print(df)
# o d r kz p kz_sum
# 0 1 3 1 5 NaN 5
# 1 1 3 2 0 NaN 5
# 2 1 10 1 7 NaN 10
# 3 1 10 3 1 NaN 10
# 4 1 10 2 2 NaN 10

# Compute teh ratio
df.p = df.kz / df.kz_sum * 100
print(df)
# o d r kz p kz_sum
# 0 1 3 1 5 100.0 5
# 1 1 3 2 0 0.0 5
# 2 1 10 1 7 70.0 10
# 3 1 10 3 1 10.0 10
# 4 1 10 2 2 20.0 10

关于python - 比例/百分比值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56831692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com