如何根据不同列的值查找一列的行索引,其中两个不同列中的值在pandas中相等?

时间:2015-07-25 08:19:27

标签: python

我有一些熊猫输出:

seq X1      X2   
0   0.59    NaN  
1   -1.28   NaN  
2   -1.26   NaN 
3   -0.79   NaN 
4   1.03    NaN
5   -1.43   NaN 
6   0.03    1.03    
7   0.92    1.03
8   -2.21   1.03    

如何获得第三列X3,它在X2中取1.03并找到与列X1中相同数字相关联的序列号?在我从row7(行索引6)开始的例子中,X3应返回4,因为当X1为1.03时seq = 4。

我希望:

seq  X1     X2  X3
0   0.59    NaN  NaN
1   -1.28   NaN  NaN
2   -1.26   NaN  NaN
3   -0.79   NaN  NaN
4   1.03    NaN  NaN
5   -1.43   NaN  NaN
6   0.03    1.03 4  
7   0.92    1.03 4
8   -2.21   1.03 4 

首先是Stack问题。原谅我的愚蠢!

1 个答案:

答案 0 :(得分:0)

您能否解释为什么您希望4的所有行中显示数字X3

您可以输入以下内容4获取seq值(X1 == 1.03):

df.loc[df['X1']==1.03, 'seq'].values[0]

但这只给你一个4.注意我已经采用了第一个seq值(通过输入[0]),因为如果你有多个地方X1 == 1.03一个数字列表将被退回(作为数据框)并且您还没有解释您希望如何处理多个seq匹配。

以下代码将运行并返回您请求的数据框,但我建议您花一点时间考虑是否需要X2X3成为数据框的一部分。 ..

# Import what you need
import pandas as pd
import numpy as np

# Define the data
x1 = np.array([0.59, -1.28, -1.27, -0.79, \
                1.03, -1.43, 0.03, 0.92, -2.21])
x2 = np.array([np.nan, np.nan, np.nan, np.nan, \
                np.nan, np.nan, 1.03, 1.03, 1.03])

# Create a pandas dataframe
df = pd.DataFrame( { 'seq' : range(9),
                     'X1'  : x1,
                     'X2'  : x2 } )

# Figure out where the first instance of X1==1.03
# occurs and grab that seq value
s_first = df.loc[df['X1']==1.03,'seq'].values[0]

# Fill in X3 according to the values in X2
df.loc[df['X2'].isnull(), 'X3'] = np.nan
df.loc[df['X2'].notnull(), 'X3'] = s_first

# Show the 9 rows in the data frame
df.head(9)