Python 3.x 熊猫基于另一列指定一列的值
给定以下数据帧:Python 3.x 熊猫基于另一列指定一列的值,python-3.x,pandas,Python 3.x,Pandas,给定以下数据帧: 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
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
提前谢谢 使用:
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
在这里,您可以直接在列上使用方法:
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
[3]中的
df['C']=df['A']。其中(df['B']<3,0)
df
出[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
[4]中的
%timeit df['A']。其中(df['B']<3,0)
%timeit np.where(df['B']<3,df['A'],0)
1000个回路,最佳3个:每个回路1.4毫秒
1000个回路,最好为3:407µs/回路
此处速度更快,但pandas中的pandas进行了更多的检查,并且有更多的选项,因此这取决于此处的用例。由您决定,此处的要点是pandas有一个内置的方法添加了计时,np。此处的
速度更快,但pandas方法有更多的选项,因此取决于用例
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