我想使用转换函数来在一个数据帧上应用一个使用两个参数的小函数。
考虑这个无用的示例功能:
import pandas as pd
def example_function(x, y):
if y=="hi":
res = x*3
else:
res = x
return res
根据y中的值(“ hi”或其他),x值将bu乘以3或返回原样。
给出此示例数据框
df = pd.DataFrame(dict([("A",[1,2,3,4]), ("B",["hi", "ho", "ho", "hi"])]))
我想得到这个结果:
A B C 0 1 hi 3 1 2 ho 2 2 3 ho 3 3 4 hi 12
我认为传递两列应该起作用:
df["combined"] = df[["A", "B"]].transform(example_function)
但是我遇到一个错误(缺少1个必需的位置参数)。有什么建议解决这个问题吗?
答案 0 :(得分:2)
这是不可能的,因为transform
会分别处理每一列,因此无法在列之间进行过滤(Series
)。
DataFrame.apply
的解决方案可根据您的需要进行工作:
df["combined"] = df.apply(lambda x: example_function(x.A, x.B), axis=1)
print (df)
A B combined
0 1 hi 3
1 2 ho 2
2 3 ho 3
3 4 hi 12
您可以使用此功能进行检查:
def function(x):
print (x)
return x
df[["A", "B"]].transform(function)