如何将多个数据框列传递给函数

时间:2019-03-21 16:27:17

标签: python pandas dataframe apache-spark-sql

在Python中,我创建了一个具有4个参数的函数(2个强制性2个可选)

    def combineDateTime(dateInput, timeInput, dateInputFormat='%Y-%m-%d', timeInputFormat='%H:%M:%S'):
.....

我想通过调用函数并向其传递现有数据框列中2个值来在数据框上创建新列,但是我无法理解传递所需列所需要的语法。

该函数测试传递的值的类型(例如str,int等),并根据它执行不同的操作,但是我认为问题在于它被传递了一系列,因此逻辑不起作用。

谁能建议我该怎么称呼它。我正在尝试使用.apply功能。

df_scd2_pd['NewColumn'] = df_scd2_pd[[col_EffFromDT,col_EffFromTM]].apply(combineDateTime, axis=1)

非常感谢

1 个答案:

答案 0 :(得分:1)

一种方法是将列(作为Series)传递给您的函数(假设它可以与Series一起用作前两个输入参数):

df = pd.DataFrame({
    'col_EffFromDT': ['2019-03-21'],
    'col_EffFromTM': ['12:34:56'],
})

def combineDateTime(dateInput, timeInput, dateInputFormat='%Y-%m-%d', timeInputFormat='%H:%M:%S'):
    return pd.to_datetime(dateInput + ' ' + timeInput, format=' '.join([dateInputFormat, timeInputFormat]))

df['NewColumn'] = combineDateTime(df['col_EffFromDT'], df['col_EffFromTM'])

print(df)

输出:

  col_EffFromDT col_EffFromTM           NewColumn
0    2019-03-21      12:34:56 2019-03-21 12:34:56

请注意:如果您调用.apply(f, axis=1),则会将每一行作为Series传递给函数f,因此您的函数将使用一个参数而不是最少需要两个参数来调用。