【问题标题】:How to use apply to subtract tuple's elements in DataFrame如何使用apply减去DataFrame中元组的元素
【发布时间】:2020-10-15 19:41:32
【问题描述】:

我有以下数据集

data = {'A': [[(1,5), (7,10), (20,22)],[(50, 52), (100, 110)], [], [(15,17)]]}
dt = pd.DataFrame(data)
print(dt)

                             A
0  [(1, 5), (7, 10), (20, 22)]
1       [(50, 52), (100, 110)]
2                           []
3                   [(15, 17)]

我想得到一个新列,它是一个列表,该列表中的每个元素都是元组元素的差异。例如对于 row1 有三个元组 (1,5), (7,10), (20,22) ,我想得到一个列表,显示 [4,3,2] 这些元素来自 5-1= 4、10-7=3 和 22-20=2 。

期望的结果可能是:

                             A          B
0  [(1, 5), (7, 10), (20, 22)]  [4, 3, 2]
1       [(50, 52), (100, 110)]    [2, 10]
2                           []         []
3                   [(15, 17)]        [2]

我可以使用loop,但这不是一种有效的方法,所以我尝试了以下更好的解决方案:

dt['A'].apply([(lambda x: i[1]- i[0])(x) for i in x.tolist()])

注意:x.tolist() 是我尝试使x 可迭代。 我的解决方案不起作用,任何帮助将不胜感激

【问题讨论】:

    标签: python pandas dataframe lambda apply


    【解决方案1】:
    dt['B'] = dt['A'].apply(lambda x: [b-a for a, b in x])
    print(dt)
    

    打印:

                                 A          B
    0  [(1, 5), (7, 10), (20, 22)]  [4, 3, 2]
    1       [(50, 52), (100, 110)]    [2, 10]
    2                           []         []
    3                   [(15, 17)]        [2]
    

    【讨论】:

    • 感谢您的回复,它正在工作,但我有一个问题想更好地理解编码。您将每个 x 作为元组,因此您可以从每个元组中获取 ab,但我认为每个 x 应该是该单元格中的整个 list example: [(1, 5), (7, 10), (20, 22)]。为什么x 是一个元组而不是整个list
    • @JoetheSecond 每个xA 列中的一个单元格。所以第一个x[(1, 5), (7, 10), (20, 22)],第二个x[(50, 52), (100, 110)] 等等。所以当你把这个 x 放到 for 循环 for a, b in x 中时,你将遍历这个列表的每个元素 [(a1, b1), (a2, b2), ...]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多