根据熊猫中的多个列值获取行索引

时间:2020-07-30 01:59:57

标签: pandas indexing

这里是样本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。 >

2 个答案:

答案 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