python - 使用 .apply() 和 Range 函数在索引级别的 Pandas Dataframe 中创建列表
问题描述
我正在尝试使用 range 函数在我的数据框中的每个索引级别创建一个列表。该列表的起始值应等于“95_moneyness”,结束值应为“105_moneyness”,步长值为 5。例如,在 Index = 1 时,列表应如下所示:[3095, 3100, 3105, 3110,.. .,3420]。到目前为止,我已经尝试了以下代码:
df2.apply(range(df2['95_moneyness'], df2['105_moneyness'], 5), axis=0)
我收到以下错误:
'Series' object cannot be interpreted as an integer.
我想这是我试图将系列传递给范围而不是整数的结果。
有人可以推荐一个解决方案吗?我考虑过可能为此定义我自己的自定义范围函数,或者对完全不同的方法持开放态度。
非常感谢!
解决方案
因此,问题在于您使用df
的是行变量而不是行变量。此外,您需要将轴更改为axis=1
以迭代行。最后,您需要将float
值转换为int
.
简而言之,该命令应如下所示:
df.apply(lambda x: range(int(x['95_moneyness']), int(x['105_moneyness']), 5), axis=1)
这是一个最小的例子:
import pandas as pd
df = pd.DataFrame({"95_moneyness": [3095.0, 3075.0, 3085.0, 3075.0, 3095.0],
"105_moneyness": [3420.0, 3395.0, 3410.0, 3400.0, 3415.0]})
df["new"] = df.apply(lambda x: range(int(x['95_moneyness']), int(x['105_moneyness']), 5), axis=1)
print(df)
# 95_moneyness 105_moneyness new
#0 3095.0 3420.0 (3095, 3100, 3105, 3110, 3115, 3120, 3125, 313...
#1 3075.0 3395.0 (3075, 3080, 3085, 3090, 3095, 3100, 3105, 311...
#2 3085.0 3410.0 (3085, 3090, 3095, 3100, 3105, 3110, 3115, 312...
#3 3075.0 3400.0 (3075, 3080, 3085, 3090, 3095, 3100, 3105, 311...
#4 3095.0 3415.0 (3095, 3100, 3105, 3110, 3115, 3120, 3125, 313...
推荐阅读
- android - Android:关于从睡眠中唤醒 CPU、执行任务然后返回睡眠的方法的建议
- c# - 在 Visual Studio 2019 for Mac 上下载 Mono 后未显示 ASP .NET 框架选项
- ios - 移动 UIButton 时使其可点击
- reactive-programming - Webflux Router 立即返回 202 并继续处理
- rename - unrar 存档然后重命名生成的文件
- javascript - 如何从控制台 chrome 复制地图对象?
- node.js - Socket.io v4 通过他们的 socket.id 强制另一个 ID 离开
- python - 较新的 pandas(>=v1.2.5?) 如何读取具有不同编码的 Excel 文件?
- python - 修复了在计算多处理期间调用函数的频率时返回负值的问题
- javascript - 当我们使用 express.static("public") 时会发生什么?