熊猫 - 正确使用应用功能

时间:2017-01-30 23:57:43

标签: python pandas

我有一个熊猫框架“df”如下:

    col1 col_group
0    1    1
1   -1    0
2   -2    0
3    4    2
4    2    1

我正在尝试复制'col1'中的值,除非我想修改'col1'中的值,如果它们位于'col_group'0或2中。修改只是将现有值乘以50 %。我需要在1MM +行上执行此操作,因此我想知道是否有最佳方法来生成新列?

所以我想要的输出是:

  col1 col_group New
0    1    1      1
1   -1    0      -0.5
2   -2    0      -1
3    4    2      2
4    2    1      2

我目前正在使用for循环,但认为pandas可能会有更快的东西。

谢谢

3 个答案:

答案 0 :(得分:2)

    df['new_col'] = df.apply( lambda x: x['col1'] * .5 
                              if x['col_group'] in (0, 2) else x['col1'], 
                              axis=1)

答案 1 :(得分:2)

pandas boolean数学

  • isin([0, 2])提供True / False
  • div(-2)True转为-.5False0
  • add(1)True转为.5False1
df.assign(New=df.col1 * df.col_group.isin([0, 2]).div(-2).add(1))

numpy.where

df.assign(New=np.where(df.col_group.isin([0, 2]), df.col1 * .5, df.col1))

均为

   col1  col_group  New
0     1          1  1.0
1    -1          0 -0.5
2    -2          0 -1.0
3     4          2  2.0
4     2          1  2.0

答案 2 :(得分:2)

您可以尝试布尔索引。

df['col2'] = df['col1']
df['col2'].iloc[:][(df[col_group]==0) | df[col_group]==2)] /= 2