gpt4 book ai didi

python - 根据不同列中的值替换特定列中的 pandas 数据帧值

转载 作者:行者123 更新时间:2023-12-02 18:37:36 26 4
gpt4 key购买 nike

给定以下数据框:

x = pd.DataFrame(
{"a": [1, 2, 3, 2], "b_1": [0, 0, 0, 0], "b_2": [0, 0, 0, 0], "b_3": [0, 0, 0, 0]}
)

看起来像:

   a  b_1  b_2  b_3
0 1 0 0 0
1 2 0 0 0
2 3 0 0 0
3 2 0 0 0

如何将其转换为:

y = pd.DataFrame(
{
"a": [1, 2, 3, 2],
"b_1": [-1, 0, 0, 0],
"b_2": [0, -1, 0, -1],
"b_3": [0, 0, -1, 0],
}
)

看起来像:

   a  b_1  b_2  b_3
0 1 -1 0 0
1 2 0 -1 0
2 3 0 0 -1
3 2 0 -1 0

编辑 2

解决方案如下:

x1 = x.melt(id_vars="a", ignore_index=False)
x1["value_2"] = x1["variable"].str.split("_").str[1].astype(int)
x1.loc[x1["a"].eq(x1["value_2"]), "value"] = -1
x1 = x1.drop("value_2", axis=1)
x1.set_index(["a", "variable"], append=True)["value"].unstack().reset_index(level=1)
x1 = x1.set_index(["a", "variable"], append=True)["value"].unstack().reset_index(level=1)

虽然我觉得很乱。

最佳答案

您可以使用pd.get_dummies .

print(pd.get_dummies(x['a']).add_prefix('b_'))
b_1 b_2 b_3
0 1 0 0
1 0 1 0
2 0 0 1
3 0 1 0

然后你有不同的选项来从x中减去它。例如,您可以将此方式与reindex结合使用。

y = x - pd.get_dummies(x['a']).add_prefix('b_').reindex(columns=x.columns, fill_value=0)
print(y)
a b_1 b_2 b_3
0 1 -1 0 0
1 2 0 -1 0
2 3 0 0 -1
3 2 0 -1 0

请注意,如果您在 x 中没有 b_* 列,并且希望从 a 列自动生成它们,那么类似这样的方法也可以工作.

x = pd.DataFrame({"a": [1, 2, 3, 2]})
y = x.sub(pd.get_dummies(x['a']).add_prefix('b_'), fill_value=0)
print(y)

关于python - 根据不同列中的值替换特定列中的 pandas 数据帧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68561301/

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