python - 将多列作为参数传递给函数,并从函数中为python中的数据框获取新列
问题描述
我想通过需要两列作为参数的函数的返回值创建一个新列。
这是我的数据框(df)。数据框具有多列索引
时间 | 温度 | 按 |
---|---|---|
秒 | ķ | 千帕 |
0.00 | 300 | 101 |
…… | …… | …… |
4.00 | 380 | 180 |
我有一个函数从 Temp and Press 返回一个新值
def density(Temp, Press)
....
return rho
使用此功能,我想创建一个新列,如下所示
时间 | 温度 | 按 | 密度 |
---|---|---|---|
秒 | ķ | 千帕 | 公斤/立方米 |
0.00 | 300 | 101 | 1000 |
…… | …… | …… | …… |
4.00 | 380 | 180 | 1004 |
从我自己的搜索来看,我似乎需要使用“应用”。
所以我尝试了一些代码,例如
df['Density', 'kg/m3'] = df['Density', 'kg/m3'].apply(density, args=(df['Temp', 'K'], df['Press','kPa']))
我收到了错误消息
TypeError:“模块”对象不可调用
从QnA,我猜应该修改函数定义以将数据帧类型作为参数。但我被困在这里。
如果我使用另一种方法,例如 for-iteration,它将得到解决。但我希望这个问题有一个更快更简洁的表达方式。
有解决方案吗?
我提前感谢它。=)
解决方案
下面的代码可以运行很长时间并且无论如何都会产生结果
df['Density', 'kg/m3'] = df.apply(lambda x:density(x['Temp', 'K'], x['Press','kPa']), axis=1)
“数据”很大(ASCII,22 Mb),但我想知道是否有办法加速计算。
推荐阅读
- apache-spark - 为什么Spark强调schema、mem、storage解耦?
- objective-c - [NSKeyedArchiver archivedDataWithRootObject:在目标 c 上崩溃
- javascript - 如何使用 jquery 在页面加载时生成动态下拉列表?
- express - 在浏览器端缓存 Express REST 路由
- java - AttributeConverter convertToEntityAttribute 循环记录并总是得到空值?
- javascript - 如何从 lodash 获取对象值?
- c# - 空引用在 C# 中基本上是全零指针吗?
- php - 推荐短代码也显示在我的网站上?如何避免这个问题
- java - 当 http 连接超时时为 TextView 设置文本
- python - 将多个唯一表单关联到 Django 中的唯一对象