【发布时间】:2017-10-31 09:10:30
【问题描述】:
我可以得到这个工作
df['col_A'] = df.apply(lambda x: getSingleValue(x['col_X']), axis=1)
当我的函数返回元组时
df['col_A'] = df.apply(lambda x: getaTuple(x['col_X'])[0], axis=1)
df['col_B'] = df.apply(lambda x: getaTuple(x['col_X'])[1], axis=1)
但是,我需要知道是否有一种方法可以使用单个函数调用将元组输出 getaTuple() 应用于数据框的多个列,而不是为每一列多次调用 getaTuple 我正在设置值.
这里是输入输出的例子
df = pd.DataFrame(["testString_1", "testString_2", "testString_3"], columns=['column_X'])
def getaTuple(string):
return tuple(string.split("_"))
In [3]: iwantthis
Out[3]:
col_X col_A col_B
0 testString_1 testString 1
1 testString_2 testString 2
2 testString_3 testString 3
仅供参考,这类似于how to apply a function to multiple columns in a pandas dataframe at one time
但不重复,因为我需要将col_X 作为输入传递给我的函数。
【问题讨论】:
-
您能发布一个小的可重现样本数据集和所需的数据集吗?
df.apply(..., axis=1)非常慢。因此,如果我们可以看到您的输入样本数据集和所需的数据集,我们可以尝试找到一个快速的矢量化解决方案...... -
@MaxU 可以不用
df.apply随意做,唯一的要求是我的函数getaTuple()读取一列并返回两个值,我需要将它们设置为同一数据框中的另外两列。 -
如果我有一个样本数据集可供使用,并且有一个所需的数据集来检查解决方案是否正确,我会这样做。请阅读how to make good reproducible pandas examples并相应地编辑您的帖子。
-
@MaxU 感谢教程链接,我添加了一个输入/输出示例,如果还有其他问题请告诉我。