pandas,应用作为数据框行条目的 args
pandas, apply with args which are dataframe row entries
我有一个 pandas 数据框 'df' 有两列 'A' 和 'B',我有一个有两个参数的函数
def myfunction(B, A):
# do something here to get the result
return result
我想使用 'apply' 函数
将它逐行应用于 df
df['C'] = df['B'].apply(myfunction, args=(df['A'],))
但我收到错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是怎么回事,好像整个系列都是df['A']!不仅仅是该系列的行条目。
我认为你需要:
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6]})
print (df)
A B
0 1 4
1 2 5
2 3 6
def myfunction(B, A):
#some staff
result = B + A
# do something here to get the result
return result
df['C'] = df.apply(lambda x: myfunction(x.B, x.A), axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
或者:
def myfunction(x):
result = x.B + x.A
# do something here to get the result
return result
df['C'] = df.apply(myfunction, axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
我会再添加一种方法,当您需要将所有列传递给函数时,它可能会很有用。
我们认为根据pandas.DataFrame.apply
docs: 传递给函数的对象是Series对象。所以我们将 pd.Series
转换为 list
。然后使用 *
运算符解压它,而我们的函数调用 .
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6]})
print (df)
A B
0 1 4
1 2 5
2 3 6
def myfunction(B, A):
#some staff
result = B + A
# do something here to get the result
return result
df['C'] = df.apply(lambda x: myfunction(*x.to_list()), axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
我有一个 pandas 数据框 'df' 有两列 'A' 和 'B',我有一个有两个参数的函数
def myfunction(B, A):
# do something here to get the result
return result
我想使用 'apply' 函数
将它逐行应用于 dfdf['C'] = df['B'].apply(myfunction, args=(df['A'],))
但我收到错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是怎么回事,好像整个系列都是df['A']!不仅仅是该系列的行条目。
我认为你需要:
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6]})
print (df)
A B
0 1 4
1 2 5
2 3 6
def myfunction(B, A):
#some staff
result = B + A
# do something here to get the result
return result
df['C'] = df.apply(lambda x: myfunction(x.B, x.A), axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
或者:
def myfunction(x):
result = x.B + x.A
# do something here to get the result
return result
df['C'] = df.apply(myfunction, axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9
我会再添加一种方法,当您需要将所有列传递给函数时,它可能会很有用。
我们认为根据pandas.DataFrame.apply
docs: 传递给函数的对象是Series对象。所以我们将 pd.Series
转换为 list
。然后使用 *
运算符解压它,而我们的函数调用 .
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6]})
print (df)
A B
0 1 4
1 2 5
2 3 6
def myfunction(B, A):
#some staff
result = B + A
# do something here to get the result
return result
df['C'] = df.apply(lambda x: myfunction(*x.to_list()), axis=1)
print (df)
A B C
0 1 4 5
1 2 5 7
2 3 6 9