gpt4 book ai didi

python - pandas agg 中的列列表的份额/百分比

转载 作者:行者123 更新时间:2023-12-04 12:11:22 24 4
gpt4 key购买 nike

我有这种数据框

dat = [{"date": datetime.date(2021,1,1), "c_id" : "a", "var1": 2, "var2":  1, "var3" : 10 },
{"date": datetime.date(2021,1,1), "c_id" : "b", "var1": 2, "var2": 0, "var3" : 20 },
{"date": datetime.date(2021,2,1), "c_id" : "a", "var1": 2, "var2": 1, "var3" : 30 },
{"date": datetime.date(2021,2,1), "c_id" : "b", "var1": 2, "var2": 3, "var3" : 10 },
{"date": datetime.date(2021,3,1), "c_id" : "a", "var1": 2, "var2": 1, "var3" : 30 },
{"date": datetime.date(2021,3,1), "c_id" : "b", "var1": 2, "var2": 3, "var3" : 20 },
]

df = pd.DataFrame(dat)

>>> df
date c_id var1 var2 var3
0 2021-01-01 a 2 1 10
1 2021-01-01 b 2 0 20
2 2021-02-01 a 2 1 30
3 2021-02-01 b 2 3 10
4 2021-03-01 a 2 1 30
5 2021-03-01 b 2 3 20
我希望每个(日期,c_id)拥有这 3 个命名变量的份额。所以例如...
>>> df
date c_id var1 var2 var3 var1_share var2_share var3_share
0 2021-01-01 a 2 1 10 0.15 0.07 0.76
1 2021-01-01 b 2 0 20 0.09 0.00 0.90
2 2021-02-01 a 2 1 30 0.06 0.03 0.90
3 2021-02-01 b 2 3 10 0.13 0.20 0.66
4 2021-03-01 a 2 1 30 0.06 0.03 0.90
5 2021-03-01 b 2 3 20 0.08 0.12 0.80
如果我单独列出这些,我可以以一种愚蠢的方式做到这一点......
>>> df.insert(5, "var1_share", df.apply(lambda x: x["var1"] / x[["var1", "var2", "var3"]].sum(), axis=1))
>>> df
date c_id var1 var2 var3 var1_share
0 2021-01-01 a 2 1 10 0.153846
1 2021-01-01 b 2 0 20 0.090909
2 2021-02-01 a 2 1 30 0.060606
3 2021-02-01 b 2 3 10 0.133333
4 2021-03-01 a 2 1 30 0.060606
5 2021-03-01 b 2 3 20 0.080000
在一些有效列列表上迭代此过程的 Pandas 魔法是什么, mylist= ["var1", "var2", "var3"] ?我怀疑有一个应用程序可以在单行中做到这一点?
另外,pandas 专家,跨数据帧的列调用此操作会是什么?我确定这很常见,但我不确定如何更好地搜索它。

最佳答案

你可以使用 sum沿着柱子。

mylist= ["var1", "var2", "var3"]
df[[f'{c}_share' for c in mylist]] = (df[mylist]/df[mylist].sum(axis=1).to_numpy()[:, None]).round(2)
print(df)
date c_id var1 var2 var3 var1_share var2_share var3_share
0 2021-01-01 a 2 1 10 0.15 0.08 0.77
1 2021-01-01 b 2 0 20 0.09 0.00 0.91
2 2021-02-01 a 2 1 30 0.06 0.03 0.91
3 2021-02-01 b 2 3 10 0.13 0.20 0.67
4 2021-03-01 a 2 1 30 0.06 0.03 0.91
5 2021-03-01 b 2 3 20 0.08 0.12 0.80

关于python - pandas agg 中的列列表的份额/百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67609849/

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