gpt4 book ai didi

python - 根据 Pandas 中的行值划分列

转载 作者:行者123 更新时间:2023-11-28 21:07:51 27 4
gpt4 key购买 nike

我试图在 Pandas 中进行一个看起来很明显的计算,但经过几次尝试后我没有找到正确的方法。

我有一个如下所示的数据框:

df = pd.DataFrame([["A", "a", 10.0],
["A", "b", 12.0],
["A", "c", 13.0],
["B", "a", 5.0 ],
["B", "b", 6.0 ],
["B", "c", 7.0 ]])

第一列是测试名,第二列是类,第三列是时间。每个测试通常显示在包含 3 个类的表中。

这是绘制它的正确格式:

sns.factorplot(x="2", y="0", hue="1", data=df,
kind="bar")

因此对于每个测试,我得到一组 3 个条,每个类一个。

但是我想更改数据框,以便第 2 列中的每个值都不是绝对值,而是与类“a”相比的比率。

所以我想把它改成这样:

df = pd.DataFrame([["A", "a", 1.0],
["A", "b", 1.2],
["A", "c", 1.3],
["B", "a", 1.0],
["B", "b", 1.2],
["B", "c", 1.4]])

我能够提取系列,更改索引以使它们匹配,进行计算,例如:

df_a = df[df[1] == "a"].set_index(0)
df_b = df[df[1] == "b"].set_index(0)
df_b["ratio_a"] = df_b[2] / df_a[2]

但这肯定是非常低效的,我需要将它分组回格式。

正确的做法是什么?

最佳答案

你可以使用 groupby/transform('first')找到每组中的第一个值:

import pandas as pd
df = pd.DataFrame([["A", "a", 10.0],
["A", "b", 12.0],
["A", "c", 13.0],
["B", "b", 6.0 ],
["B", "a", 5.0 ],
["B", "c", 7.0 ]])
df = df.sort_values(by=[0,1])
df[2] /= df.groupby(0)[2].transform('first')

产量

   0  1    2
0 A a 1.0
1 A b 1.2
2 A c 1.3
3 B a 1.0
4 B b 1.2
5 B c 1.4

关于python - 根据 Pandas 中的行值划分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41000202/

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