gpt4 book ai didi

pandas - 根据其他列的值生成新列

转载 作者:行者123 更新时间:2023-12-05 01:49:46 25 4
gpt4 key购买 nike

这是我的示例数据输入和输出:

df=pd.DataFrame({'A_flag': [1, 1,1], 'B_flag': [1, 1,0],'C_flag': [0, 1,0],'A_value': [5, 3,7], 'B_value': [2, 7,4],'C_value': [4, 2,5]})

df1=pd.DataFrame({'A_flag': [1, 1,1], 'B_flag': [1, 1,0],'C_flag': [0, 1,0],'A_value': [5, 3,7], 'B_value': [2, 7,4],'C_value': [4, 2,5], 'Final':[3.5,3,7]})

我想根据 A_flag、B_flag 和 C_flag 生成另一个名为“Final”的列:

(a) 如果等于 1 的三列数为 3,则 'Final'=(A_value, B_value, C_value) 的中值

(b) 如果满足条件的数量为 2,则“最终”= 这两个条件的平均值

(c) 如果数字是 1,则 'Final' = 那个

例如第1行,A_flag=1 and B_flag =1, 'Final'=A_value+B_value/2=5+2/2=3.5在第 2 行中,所有三个标志均为 1,因此“最终”= (3,7,2) 的中位数 =3在第 3 行中,只有 A_flag=1,所以 'Final'=A_value=7

我尝试了以下方法:

df.loc[df[['A_flag','B_flag','C_flag']].eq(1).sum(axis=1)==3, "Final"]= df[['A_flag','B_flag','C_flag']].median(axis=1)

df.loc[df[['A_flag','B_flag','C_flag']].eq(1).sum(axis=1)==2, "Final"]=
df.loc[df[['A_flag','B_flag','C_flag']].eq(1).sum(axis=1)==1, "Final"]=

我不知道如何为第二种和第三种情况对列进行子集化。

最佳答案

假设标志和值列的顺序匹配,您可以先过滤像列一样的标志和值,然后屏蔽中的值flag0 的列,然后沿 axis=1

计算 median
flag = df.filter(like='_flag')
value = df.filter(like='_value')

df['median'] = value.mask(flag.eq(0).to_numpy()).median(1)

   A_flag  B_flag  C_flag  A_value  B_value  C_value  median
0 1 1 0 5 2 4 3.5
1 1 1 1 3 7 2 3.0
2 1 0 0 7 4 5 7.0

关于pandas - 根据其他列的值生成新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73692792/

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