使用列和行作为参数遍历整个Pandas Dataframe

时间:2019-02-27 21:40:52

标签: python pandas python-2.7 dataframe sklearn-pandas

我有这个空的pandas数据框和一个函数值(x,y),它带有2个参数,即pandas数据框中点的行号和列号。我想知道是否有一种更简单的方法可以使用这些参数(也许使用df.apply)遍历整个空数据框。

我知道可以遍历每个单独的列并在单独的列上运行df.apply,但是有可能这样做而无需运行任何循环。

基本上,我正在寻找可以在整个数据帧上运行的类似内容

df_copy.apply(lambda x: myfunction(x.value, x.column))

但是,x.column不存在,所以它有另一种实现方式,或者我做错了什么事

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,请使用一系列的nameindex属性:

df = pd.DataFrame(1, index = np.arange(10,51,10), columns = np.arange(5))

显示输入数据框

    0  1  2  3  4
10  1  1  1  1  1
20  1  1  1  1  1
30  1  1  1  1  1
40  1  1  1  1  1
50  1  1  1  1  1

让我们定义自定义函数,并使用行作为列来进行计算。

def f(x):
    #add row values to column values
    return x.name + x.index

df.apply(f)

输出:

     0   1   2   3   4
10  10  11  12  13  14
20  20  21  22  23  24
30  30  31  32  33  34
40  40  41  42  43  44
50  50  51  52  53  54

注意:apply正在将数据帧(是pd.Series)的每一列传递给函数f。每个系列都有一个属性name(这是列标题)和index(这是数据帧行索引)。因此,函数f为数据框的每一列返回一个计算得出的pd.Series,并作为一个数据框放回去。

回答中的问题,让我们使用字符串:

df = pd.DataFrame(1, index=['Ted','Bill','Ralph','John','Tim'], columns=['A','B','C','D','E'])

def f(x):
    #Concatenate row values with column values
    return x.index + '_' + x.name

df.apply(f)

或使用lambda函数

df.apply(lambda x: x.index + '_' + x.name)

输出:

             A        B        C        D        E
Ted      Ted_A    Ted_B    Ted_C    Ted_D    Ted_E
Bill    Bill_A   Bill_B   Bill_C   Bill_D   Bill_E
Ralph  Ralph_A  Ralph_B  Ralph_C  Ralph_D  Ralph_E
John    John_A   John_B   John_C   John_D   John_E
Tim      Tim_A    Tim_B    Tim_C    Tim_D    Tim_E