如何有效地将元组同时应用于pandas数据帧中的多个列

时间:2017-05-30 18:58:28

标签: python pandas

我能搞定这个

<?php while ($row = mysql_fetch_assoc($result)): ?>
  <li> <?= $row['ounces'] ?> oz <?= $row['name'] ?></li>
<?php endwhile ?>

当我的函数返回元组时

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

仅供参考,这类似于how to apply a function to multiple columns in a pandas dataframe at one time 但不重复,因为我需要将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 作为输入传递给我的函数。

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,这应该有效:

df[['col_A','col_B']] = df['col_X'].apply(getaTuple).apply(pd.Series)

答案 1 :(得分:3)

这是矢量化解决方案:

In [53]: df[['col_A','col_B']] = df.column_X.str.split('_', expand=True)

In [54]: df
Out[54]:
       column_X       col_A col_B
0  testString_1  testString     1
1  testString_2  testString     2
2  testString_3  testString     3

<强>更新

In [62]: df[['col_A','col_B']] = df.column_X.str.split('_', expand=True)

In [63]: df
Out[63]:
       column_X       col_A col_B
0  testString_1  testString     1
1  testString_2  testString     2
2  testString_3  testString     3
3                            None
4       aaaaaaa     aaaaaaa  None

PS如果您想要的数据集看起来不一样,请在您的问题中发布