使用申请多列

问题描述

我需要基于一个现有的 2 列创建 2 个新列。我正在尝试使用 1 个单独的应用函数而不是 2 个单独的应用函数来做到这一点。 例如初始Df如下:

https://myblog.com/?api&value1=62.234&value2=keyword1,keyword2,keyword3,keyword4&value3=565

接下来我尝试使用以下方法创建 2 个新列:

    ID1 ID2
0   1   11
1   2   12
2   3   13
3   4   14
4   5   15
5   6   16
6   7   17
7   8   18
8   9   19
9   10  20

问题是我想单独访问我无法访问的值。在这里,我尝试转换为列表,但是当我执行 list[0] 时,我得到

def funct(row):
    list1 = row.values
    print(list1[0])
    return row

df[['s1','s2']] = df[['ID1',"ID2"]].apply(lambda row: funct(row))

如何访问上面的1和11?当我使用 apply 将两个系列一起发送时,我应该如何索引以访问单个系列值? 注意:funct() 的内容现在只是返回相同的内容,因为我仍然不知道如何访问这些值以执行某些操作

解决方法

向您的应用函数添加参数 axis=1,例如

import pandas as pd
from io import StringIO

s = """,ID1,ID2
   0,1,11
   1,2,12
   2,3,13
   3,4,14
   4,5,15
   5,6,16
   6,7,17
   7,8,18
   8,9,19
   9,10,20
"""

df = pd.read_csv(StringIO(s),index_col=0)

def funct(row):
    # return row

    # update the answer
    return pd.Series([row.ID1 + 100,row.ID2 + 20])

df[['s1','s2']] = df[['ID1',"ID2"]].apply(funct,axis=1)