gpt4 book ai didi

python-3.x - 如何使用不同的值和python中的各种条件更改数据框的列?

转载 作者:行者123 更新时间:2023-12-04 08:49:03 25 4
gpt4 key购买 nike

我有一个数据框,我想根据满足的条件使用不同的值更改列“conf”。

df=pd.DataFrame({"conf":[100,100,100,100],
"i":[-2,3,-3,10],
"o":[12,13,14,16],
"n":[6,4,6,1],
"id":[1.4,2,1.3,1.7],
"od":[2,3,2.5,8],
"nd":[2,3,2.4,-0.9],
"iwr":[60,60,45,65],
"owr":[65,88,90,78],
"nwr":[67,63,60,60]})
df
我想这样做,但我以错误的方式这样做,因为我将系列传递给 if 条件,这不是正确的方法。
def column_alter(df):
if (((df["id"]>1.5) & (df["iwr"]>1.5)):
if (((df["od"]>1.5) & (df["nd"]>1.5)) & ((df["owr"]>60) & (df["nwr"]>60))):
df["conf"]= df["conf"]
else:
df["conf"]= df["conf"]*0.5
else:
if (((df["od"]>1.5) & (df["nd"]>1.5)) & ((df["owr"]>60) &(df["nwr"]>60))):
df["conf"]= df["conf"]
else:
df["conf"]= df["conf"]*0.25
return df
所需输出:我想返回带有修改后的 Conf 值的整个数据帧,即 [100,100,25,50]

最佳答案

因为否则可以通过 ~ 反转掩码, 链式面具由 &和多个 DataFrame.loc :

m0 = (df["id"]>1.5) & (df["iwr"]>1.5)
m1 = (df["od"]>1.5) & (df["nd"]>1.5) & (df["owr"]>60) & (df["nwr"]>60)

df.loc[m0 & ~m1, "conf"] *= 0.5
df.loc[~m0 & ~m1, "conf"] *= 0.25
print (df)
conf i o n id od nd iwr owr nwr
0 100.0 -2 12 6 1.4 2.0 2.0 60 65 67
1 100.0 3 13 4 2.0 3.0 3.0 60 88 63
2 25.0 -3 14 6 1.3 2.5 2.4 45 90 60
3 50.0 10 16 1 1.7 8.0 -0.9 65 78 60
另一个解决方案 numpy.select :
m0 = (df["id"]>1.5) & (df["iwr"]>1.5)
m1 = (df["od"]>1.5) & (df["nd"]>1.5) & (df["owr"]>60) & (df["nwr"]>60)

df['conf'] *= np.select([m0 & ~m1, ~m0 & ~m1], [0.5, 0.25], default=1)
#long alternative
#df['conf'] = np.select([m0 & ~m1, ~m0 & ~m1],
[df['conf'] * 0.5, df['conf'] * 0.25], default=df['conf'])
print (df)
conf i o n id od nd iwr owr nwr
0 100.0 -2 12 6 1.4 2.0 2.0 60 65 67
1 100.0 3 13 4 2.0 3.0 3.0 60 88 63
2 25.0 -3 14 6 1.3 2.5 2.4 45 90 60
3 50.0 10 16 1 1.7 8.0 -0.9 65 78 60

关于python-3.x - 如何使用不同的值和python中的各种条件更改数据框的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64170341/

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