gpt4 book ai didi

python - 如何有条件地将一个热向量添加到 Pandas DataFrame

转载 作者:行者123 更新时间:2023-12-01 21:23:46 24 4
gpt4 key购买 nike

我在 Python 中有以下 Pandas DataFrame:

import numpy as np
import pandas as pd
df = pd.DataFrame(np.array([[1, 2, 3], [3, 2, 1], [2, 1, 1]]),
columns=['a', 'b', 'c'])
df

输出时如下所示:

    a   b   c
0 1 2 3
1 3 2 1
2 2 1 1

我需要添加 3 个新列,如“d”列、“e”列和“f”列。每个新列中的值将根据“b”列和“c”列的值确定。

在给定行中:

  • 如果“b”列的值大于“c”列的值,则 [d, e, f] 列的值为 [1, 0, 0]。
  • 如果“b”列的值等于“c”列的值,则 [d, e, f] 列的值为 [0, 1, 0]。
  • 如果“b”列的值小于“c”列的值,则 [d, e, f] 列的值为 [0, 0, 1]。

此操作后,DataFrame 需要如下所示:

    a   b   c  d  e  f
0 1 2 3 0 0 1 # Since b smaller than c
1 3 2 1 1 0 0 # Since b bigger than c
2 2 1 1 0 1 0 # Since b = c

我原来的 DataFrame 比这个例子中的大得多。有没有在 Python 中执行此操作而无需循环遍历 DataFrame 的好方法?

最佳答案

您可以使用 np.where 创建条件向量并使用 str.get_dummies 创建虚拟对象

df['vec'] = np.where(df.b>df.c, 'd', np.where(df.b == df.c, 'e', 'f'))
df = df.assign(**df['vec'].str.get_dummies()).drop('vec',1)

a b c d e f
0 1 2 3 0 0 1
1 3 2 1 1 0 0
2 2 1 1 0 1 0

关于python - 如何有条件地将一个热向量添加到 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63403084/

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