gpt4 book ai didi

python - 基于python中的逻辑表达式使用for循环创建新列

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

我有以下数据框:

df1 = pd.DataFrame()
df1 ['TG'] = [0,2,1,3,5,7,]
df1['Value'] =[0.2,0.5,0.015,0.6,0.11,0.12]

我想根据 TG 列的值创建新列(即 <1、<2、<3、<4 和 >0、>1、>2、>3 等)列名将为 U0.5、U1.5、U2.5、U3.5、O0.5、O1.5、O2.5、O3.5因此,我将有 8 个具有上述列名的新列。每个单元格的值将来自 列。我的预期输出如下:

enter image description here

我可以使用 np.where 一次创建一个新列。

谁能告诉我如何循环执行此操作?

谢谢。

齐普

最佳答案

使用 numpy 广播,所以不需要循环:

#create array
arr = np.arange(1, 5) - .5
print (arr)
[0.5 1.5 2.5 3.5]

#create Mx1 arrays from Series
vals = df1['Value'].values[:, None]
tg = df1['TG'].values[:, None]

#compare arrays and multiple, use DataFrame constructor
df2 = pd.DataFrame((arr > tg) * vals, columns=arr).add_prefix('U')
df3 = pd.DataFrame((arr < tg) * vals, columns=arr).add_prefix('O')

#join all together
df = pd.concat([df1, df2, df3], axis=1)
print (df)
TG Value U0.5 U1.5 U2.5 U3.5 O0.5 O1.5 O2.5 O3.5
0 0 0.200 0.2 0.200 0.200 0.200 0.000 0.00 0.00 0.00
1 2 0.500 0.0 0.000 0.500 0.500 0.500 0.50 0.00 0.00
2 1 0.015 0.0 0.015 0.015 0.015 0.015 0.00 0.00 0.00
3 3 0.600 0.0 0.000 0.000 0.600 0.600 0.60 0.60 0.00
4 5 0.110 0.0 0.000 0.000 0.000 0.110 0.11 0.11 0.11
5 7 0.120 0.0 0.000 0.000 0.000 0.120 0.12 0.12 0.12

循环解决方案:

arr = np.arange(1, 5) - .5
for x in arr:
df1[f"U{x}"] = df1["Value"] * (df1["TG"] < x)
for x in arr:
df1[f"O{x}"] = df1["Value"] * (df1["TG"] > x)

print (df1)
TG Value U0.5 U1.5 U2.5 U3.5 O0.5 O1.5 O2.5 O3.5
0 0 0.200 0.2 0.200 0.200 0.200 0.000 0.00 0.00 0.00
1 2 0.500 0.0 0.000 0.500 0.500 0.500 0.50 0.00 0.00
2 1 0.015 0.0 0.015 0.015 0.015 0.015 0.00 0.00 0.00
3 3 0.600 0.0 0.000 0.000 0.600 0.600 0.60 0.60 0.00
4 5 0.110 0.0 0.000 0.000 0.000 0.110 0.11 0.11 0.11
5 7 0.120 0.0 0.000 0.000 0.000 0.120 0.12 0.12 0.12

关于python - 基于python中的逻辑表达式使用for循环创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55701256/

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