在python中创建函数并将其应用于datafram

2024-09-28 21:30:54 发布

您现在位置:Python中文网/ 问答频道 /正文

需要帮助创建和调用函数

当前代码:

Table1 = Table1.assign(Field3 = np.where(Table1.Field1.astype(str).str[0:5].isin(['CEQTY','LPCEQ']),
                                         Table1.Field2, 0)) 

势函数

def func(a,b):
   Table1 = Table1.assign(a = np.where(Table1.Field1.astype(str).str[0:5].isin([b]),
                                       Table1.Field2, 0)) 

调用函数

Table1.apply(func,a,b)?

我将这个过程重复了100次,唯一改变的是'Field3'isin.中的参数 创建函数时不断出现错误,可能是由于语法原因


Tags: 代码npwherefunc调用函数assignfield2field1
2条回答

您很可能收到语法错误,因为您没有使用正确的语法调用func

使用此选项:

Table1.apply(func(a, b))

调用函数时,需要在所提供的参数周围使用括号

考虑替换^{},因为不是对每一列或每一行执行独占操作,而是基于其他列的条件逻辑,Field1Field2,用于new列。此外,^{}采用了一个不带引号的名称,该名称将不适用于传入的字符串

相反,运行一个简单的Python函数调用,按字符串分配列,然后返回一个新的df。下面用随机数据演示,为再现性设定种子,有条件地产生字段3-5

import pandas as pd
import numpy as np

np.random.seed(55)    
Table1 = pd.DataFrame({'ID': [np.random.randint(15) for _ in range(50)],
                       'Field1': [np.random.choice(['CEQTY','LPCEQ','ABCDE','WVXYZ','12345'],1).item(0) 
                                  for _ in range(50)],
                       'Field2':  np.random.randn(50)*100
                       }, columns=['ID', 'Field1', 'Field2'])

def func(df):
    # ITERATE THROUGH LIST OF TUPLES (NEW COL AND LIST OF SEARCH ITEMS)
    for i in [('Field3',['CEQTY','LPCEQ']),
              ('Field4',['ABCDE','WVXYZ']),
              ('Field5',['12345'])]:

        # ASSIGN NEW COL, i[0], BY STRING BASED ON SEARCH LIST, i[1]
        df[i[0]] = np.where(df.Field1.astype(str).str[0:5].isin(i[1]), df.Field2, 0) 

    return df

output = func(Table1)    
print(output.head(10))
#    ID Field1      Field2      Field3      Field4     Field5
# 0  13  LPCEQ  105.640854  105.640854    0.000000   0.000000
# 1  10  12345  -13.049038    0.000000    0.000000 -13.049038
# 2   7  CEQTY  -85.079280  -85.079280    0.000000   0.000000
# 3   8  12345   12.047304    0.000000    0.000000  12.047304
# 4  13  12345  -29.095108    0.000000    0.000000 -29.095108
# 5  13  12345  -24.229704    0.000000    0.000000 -24.229704
# 6  13  LPCEQ  -97.472869  -97.472869    0.000000   0.000000
# 7   5  ABCDE -221.743951    0.000000 -221.743951   0.000000
# 8   7  LPCEQ   -0.155842   -0.155842    0.000000   0.000000
# 9   5  CEQTY    2.297829    2.297829    0.000000   0.000000

相关问题 更多 >