Pandas根据另一列的值给一列赋值

3

给定以下数据框:

import pandas as pd
df = pd.DataFrame(
        {'A':[10,20,30,40,50,60],
         'B':[1,2,1,4,5,4]
        })
df

    A   B
0   10  1
1   20  2
2   30  1
3   40  4
4   50  5
5   60  4

我希望新增一列'C',其值应等于'A'中对应值,但仅当'B'的相应值小于3时才成立,否则为0。 期望结果如下:
    A   B  C
0   10  1  10
1   20  2  20
2   30  1  30
3   40  4  0
4   50  5  0
5   60  4  0

谢谢您的提前帮助!

2个回答

6
使用 np.where 函数:
df['C'] = np.where(df['B'] < 3, df['A'], 0)

>>> df
    A  B   C
0  10  1  10
1  20  2  20
2  30  1  30
3  40  4   0
4  50  5   0
5  60  4   0

4

您可以直接在列上使用 pandas 方法 where

In [3]:
df['C'] = df['A'].where(df['B'] < 3,0)
df

Out[3]:
    A  B   C
0  10  1  10
1  20  2  20
2  30  1  30
3  40  4   0
4  50  5   0
5  60  4   0

时间

In [4]:
%timeit df['A'].where(df['B'] < 3,0)
%timeit np.where(df['B'] < 3, df['A'], 0)

1000 loops, best of 3: 1.4 ms per loop
1000 loops, best of 3: 407 µs per loop

np.where 在这里更快,但pandas的where会进行更多的检查并具有更多的选项,因此这取决于使用情况。


由你决定,这里的重点是pandas有一个内置的方法。 - EdChum
添加了计时功能,np.where更快,但是pandas方法有更多选项,所以取决于使用情况。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接