python - 如何从apply方法中获取map的第二个参数?
问题描述
我有以下数据集:
data = {"C1":[[(3, 5), (6, 8), (9-10)], [(0, 2), (5, 7), (9, 10)], [], [(1, 11)], [(0, 7), (8, 10)], [(5, 6)], [(0, 1)]]}
dt = pd.DataFrame(data)
print(dt)
看起来像:
0 [(3, 5), (6, 8), (9,10)]
1 [(0, 2), (5, 7), (9, 10)]
2 []
3 [(1, 11)]
4 [(0, 7), (8, 10)]
5 [(5, 6)]
6 [(0, 1)]
我想得到每个元组的长度(元组的第二个元素减去第一个元素)。
我最喜欢的输出是
0 [(3, 5), (6, 8), (9,10)] [2,2,1]
1 [(0, 2), (5, 7), (9,10)] [2,2,1]
2 [] []
3 [(1, 11)] [10]
4 [(0, 7), (8, 10)] [7,2]
5 [(5, 6)] [1]
6 [(0, 1)] [1]
我目前正在使用此代码:
dt['C2] = dt['C1'].apply(list(map(lambda x: x[1]-x[0])))
它给出了以下错误:
map() must have at least two arguments
由于我正在使用该apply
方法,我希望自动获取的第二个参数map
from apply
,为什么它没有发生?
解决方案
给定的 lambda 分别.apply()
应用于列中的每一行。因此,您可以只输入一个列表推导来做您想做的事情:
data = {"C1":[[(3, 5), (6, 8), (9, 10)], [(0, 2), (5, 7), (9, 10)], [], [(1, 11)], [(0, 7), (8, 10)], [(5, 6)], [(0, 1)]]}
dt = pd.DataFrame(data)
print(dt)
>>> dt['C2'] = dt['C1'].apply(lambda lst: [tup[1] - tup[0] for tup in lst])
>>> dt
C1 C2
0 [(3, 5), (6, 8), (9, 10)] [2, 2, 1]
1 [(0, 2), (5, 7), (9, 10)] [2, 2, 1]
2 [] []
3 [(1, 11)] [10]
4 [(0, 7), (8, 10)] [7, 2]
5 [(5, 6)] [1]
6 [(0, 1)] [1]
推荐阅读
- python - Pandas ValueError:索引数据必须是一维的
- performance - Google Scripts - 使用 For 循环进行数据映射加载数据非常慢
- android - GeoLocation 为 Android 11 和 Ionic 6 返回“位置不可用”
- javascript - Javascript loop through DOM
- swiftui - 使用 swiftUI 向子视图 (WKWebView) 发送更新?
- python - 带有 KWARGS 的 Python Pickle 自定义类会导致类型错误。我如何处理 kwargs?
- reactjs - 如何在 ReactJs 中仅在 Home 组件上呈现特定组件?
- react-native - 反应原生重新选择错误选择器创建者,除了所有输入
- haskell - Haskell - 将联合列表转换为列表元组
- spring-security - 连接被拒绝 - 无法获取用户详细信息 - 尝试访问身份验证服务器时