python - 使用变换计算两个不同列的值
问题描述
我想应用一个使用变换函数在一个数据帧上使用两个参数的小函数。
考虑这个相当无用的示例函数:
import pandas as pd
def example_function(x, y):
if y=="hi":
res = x*3
else:
res = x
return res
根据 y 中的值(“hi”或其他),值 x 将乘以 3 或原样返回。
鉴于此示例数据框
df = pd.DataFrame(dict([("A",[1,2,3,4]), ("B",["hi", "ho", "ho", "hi"])]))
我想得到这个结果:
美国广播公司 0 1 嗨 3 1 2 嗬 2 2 3 嗬 3 3 4 嗨 12
我认为传递两列应该有效:
df["combined"] = df[["A", "B"]].transform(example_function)
但我收到一个错误(缺少 1 个必需的位置参数)。任何建议如何解决这个问题?
解决方案
这是不可能的,因为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)
推荐阅读
- flutter - 在我的颤振应用程序中集成语音命令输入的好方法是什么?
- ionic-framework - cordova-plugin-admob-free 不适用于 cordova-plugin-firebase
- haskell - 在haskell中为monads创建一个过滤函数
- r - 有没有办法根据列中的因子循环数据并加起来行数?
- git - 为什么我要登录这么多次?
- tensorflow - Tensorflow 2.0:已保存模型中的变量
- database - 从 firebase 数据库中检索数据作为 hashmap 的值,并使用 react native 显示键和值
- java - java.lang.ClassCastException:java.util.LinkedHashMap 在尝试对列表进行排序时无法转换为 java.lang.Comparable 异常
- c++ - 如何将一些文件(头文件、词汇表、源文件)包含到我的 eclipse 程序中到项目中?
- c++ - 如何从 txt 文件中读取带有竖线管道的数据?