Python 使用多个列应用函数?

Python 使用多个列应用函数?,python,pandas,Python,Pandas,我需要在pandas数据框中创建一列,该列依赖于同一行中的其他项。例如,这里是我的数据帧 df=pd.DataFrame( [a',[a',1],[a',1],[a',2],[b',2],[b',2],[c',3], 列=['字母','数字'] ) 您可以尝试使用pd.Series.where()/np.where()。如果您只对布尔值的int表示感兴趣,可以选择其他解决方案。如果希望If/else值有更多的自由度,可以使用np.where() 您可以尝试使用pd.Series.where()

我需要在pandas数据框中创建一列,该列依赖于同一行中的其他项。例如,这里是我的数据帧

df=pd.DataFrame(
[a',[a',1],[a',1],[a',2],[b',2],[b',2],[c',3],
列=['字母','数字']
)

您可以尝试使用pd.Series.where()/np.where()。如果您只对布尔值的int表示感兴趣,可以选择其他解决方案。如果希望If/else值有更多的自由度,可以使用np.where()


您可以尝试使用pd.Series.where()/np.where()。如果您只对布尔值的int表示感兴趣,可以选择其他解决方案。如果希望If/else值有更多的自由度,可以使用np.where()


您可以将
apply
axis=1
一起使用。假设您想调用新列
c

df['c'] = df.apply(
    lambda row: (row['letter'] == 'a') and (row['number'] == 2),
    axis=1
).astype(int)

print(df)
#  letter  number  c
#0      a     NaN  0
#1      a     1.0  0
#2      a     1.0  0
#3      a     2.0  1
#4      b     2.0  0
#5      b     2.0  0
#6      c     3.0  0
但是
apply
很慢,如果可能的话应该避免。在这种情况下,最好使用向量化的布尔逻辑运算

df['c'] = ((df['letter'] == "a") & (df['number'] == 2)).astype(int)

这与上面使用
apply
的结果相同。

您可以使用
apply
axis=1
。假设您想调用新列
c

df['c'] = df.apply(
    lambda row: (row['letter'] == 'a') and (row['number'] == 2),
    axis=1
).astype(int)

print(df)
#  letter  number  c
#0      a     NaN  0
#1      a     1.0  0
#2      a     1.0  0
#3      a     2.0  1
#4      b     2.0  0
#5      b     2.0  0
#6      c     3.0  0
但是
apply
很慢,如果可能的话应该避免。在这种情况下,最好使用向量化的布尔逻辑运算

df['c'] = ((df['letter'] == "a") & (df['number'] == 2)).astype(int)

这与上面使用
apply
的结果相同。

如果只是简单的条件,您不需要在这里使用
apply
<代码>df['new_column']=((df['letters']=“a”)&(df['numbers']==2)).astype(int)这是有意义的,但即使是有条件的3或4列,这也会变得很难处理。有其他选择吗?有其他选择,你看过文档了吗?你最好的办法是尝试一些东西,看看它是否符合你的需要。@max无论是通过
apply
还是使用布尔条件,它都会同样笨拙(代码方面),但后者会快得多。如果只是简单的条件,你不需要在这里使用
apply
<代码>df['new_column']=((df['letters']=“a”)&(df['numbers']==2)).astype(int)这是有意义的,但即使是有条件的3或4列,这也会变得很难处理。有其他选择吗?有其他选择,你看过文档了吗?您最好尝试一下,看看它是否符合您的需要。@max无论是通过
apply
还是使用布尔条件,它都同样笨拙(代码方面),但后者会快得多。