Python 使用多个列应用函数?
我需要在pandas数据框中创建一列,该列依赖于同一行中的其他项。例如,这里是我的数据帧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()
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
还是使用布尔条件,它都同样笨拙(代码方面),但后者会快得多。