【问题标题】:How to get the second parameter of map from an apply method?如何从apply方法中获取map的第二个参数?
【发布时间】:2020-10-10 23:03:49
【问题描述】:

我有以下数据集:

 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的第二个参数会自动从apply获取,为什么没有发生?

【问题讨论】:

    标签: python list apply


    【解决方案1】:

    赋予.apply() 的 lambda 分别应用于列中的每一行。因此,您可以只输入一个列表推导来做您想做的事情:

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 2022-11-01
      • 1970-01-01
      • 2011-11-23
      • 2012-06-18
      • 2021-12-10
      • 2018-05-02
      • 2016-01-29
      相关资源
      最近更新 更多