gpt4 book ai didi

python - 从 Pandas 数据框中的其他列分配列值

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

如果满足条件,我如何分配我的数据框中的列等于另一列?

更新
问题
当满足条件时,我需要为许多列分配值(有时是该行中另一列的值)。

条件不是问题。

我需要一种有效的方法来做到这一点:

df.loc[some condition it doesn't matter,
['a','b','c','d','e','f','g','x','y']]=df['z'],1,3,4,5,6,7,8,df['p']

简化的示例数据

d = {'var' : pd.Series([10,61]),
'c' : pd.Series([100,0]),
'z' : pd.Series(['x','x']),
'y' : pd.Series([None,None]),
'x' : pd.Series([None,None])}
df=pd.DataFrame(d)

条件如果 var 不丢失且第一个数字小于 5
结果使df.x=df.z & df.y=1

这是不起作用的伪代码,但这是我想要的。

df.loc[((df['var'].dropna().astype(str).str[0].astype(int) < 5)),
['x','y']]=df['z'],1

但是我明白了

ValueError:无法使用长度与值不同的类似列表的索引器进行设置

理想输出

     c  var     x     z     y
0 100 10 x x 1
1 0 61 None x None

下面的代码有效,但效率太低,因为我需要为多个列赋值。

df.loc[((df['var'].dropna().astype(str).str[0].astype(int) < 5)),
['x']]=df['z']
df.loc[((df['var'].dropna().astype(str).str[0].astype(int) < 5)),
['y']]=1

最佳答案

你可以按行工作:

def f(row):
if row['var'] is not None and int(str(row['var'])[0]) < 5:
row[['x', 'y']] = row['z'], 1
return row

>>> df.apply(f, axis=1)
c var x y z
0 100 10 x 1 x
1 0 61 None NaN x

覆盖原来的df:

df = df.apply(f, axis=1)

关于python - 从 Pandas 数据框中的其他列分配列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160808/

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