在DataFrame上使用.apply

问题描述

我已经看到了R的问题,但没有看到python的问题。

基本上,我有一个很大的DataFrame,在其中逐行应用一个函数。运行需要很长时间,我希望打印一份声明以显示我的位置。我举了一个我想做的事的例子。

我知道一种替代方法,但我想知道是否可以申请。

所以这可以正常工作

import pandas as pd

df = pd.DataFrame({0: [1,2,3],1:[2,3,4],2: [0,0]})

i = 0
for rows in df:
    print ("Current row: {}".format(i))
    df[2][i] = df[0][i] * df[1][i] 
    i += 1

print (df)

输出

Current row: 0
Current row: 1
Current row: 2

    0   1   2
0   1   2   2
1   2   3   6
2   3   4   12

但是我希望做一些适用的事情,例如:

def func(df):
    #something here to print
    return df[0] * df[1]

df[2] = df.apply(func,axis=1)

非常感谢。

解决方法

您可以使用series.name

>>> def mul(row):
        print('Current row:',row.name)
        return row[0] * row[1]

>>> df[2] = df.apply(mul,axis=1);print(df)

Current row: 0
Current row: 1
Current row: 2
   0  1   2
0  1  2   2
1  2  3   6
2  3  4  12
,

我想您可以这样编写函数:

def func(df):
    print(f'Current row: {df.name}')
    return df[0] * df[1]

用法如下:

>>> df[2] = df.apply(func,axis=1)
Current row: 0
Current row: 1
Current row: 2

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...