这里是样本df >>实数> 50万行。我正在尝试获取“触发器”列== 1的每个实例的行索引,因此我可以在“价格”列中获取值。查看所需的列。
df10 = pd.DataFrame({
'Trigger': [0,0,1,1,1,0,0,1,0,1],
'Price': [12,14,16,18,20,2,4,6,8,10],
'Stock': ['AAPL', 'AAPL', 'AAPL', 'AAPL', 'AAPL', 'IBM','IBM','IBM','IBM','IBM'],
'desired':[0,0,16,18,20,0,0,6,0,10]
})
我正在在线查看答案,您可以使用此代码,但是它提供了一个数组或所有实例,我不知道如何移动数组中的位置>>或如果可能的话
df10['not_correct'] = np.where(df10['Trigger'] ==1 , df10.iloc[df10.index[df10['Trigger'] == 1][0],0],0)
所以从本质上讲,我想找到列'Trigger'== 1的(所有)实例的索引行数。这类似于excel >> if(a [row#] == 1,b [row#],0)
请记住,这是示例,我不知道实际df中的1和0在哪里,或者在“触发器”列中实际有多少个1 >>可能是0、1或50。 >
答案 0 :(得分:1)
要获取行号,请在df.index
中使用np.where
。
df10['row']=np.where(df10['Trigger']==1,df10.index,0)
df10
Out[7]:
Trigger Price Stock desired row
0 0 12 AAPL 0 0
1 0 14 AAPL 0 0
2 1 16 AAPL 16 2
3 1 18 AAPL 18 3
4 1 20 AAPL 20 4
5 0 2 IBM 0 0
6 0 4 IBM 0 0
7 1 6 IBM 6 7
8 0 8 IBM 0 0
9 1 10 IBM 10 9
答案 1 :(得分:0)
np.where
不需要过滤结果
df10['New']=np.where(df10.Trigger==1,df10.Price,0)
df10
Out[180]:
Trigger Price Stock desired New
0 0 12 AAPL 0 0
1 0 14 AAPL 0 0
2 1 16 AAPL 16 16
3 1 18 AAPL 18 18
4 1 20 AAPL 20 20
5 0 2 IBM 0 0
6 0 4 IBM 0 0
7 1 6 IBM 6 6
8 0 8 IBM 0 0
9 1 10 IBM 10 10