如何获取熊猫数据框中特定列的模式值的索引

时间:2019-08-26 09:01:47

标签: pandas dataframe indexing mode

我有一个排序的数据框,如下所示:

            x_test         test_label     x_train             train_label  \
37  [[6.3, 3.3, 4.7, 1.6]]        [1]  [[6.4, 3.2, 4.5, 1.5]]         [1]   
63  [[6.3, 3.3, 4.7, 1.6]]        [1]  [[6.0, 3.4, 4.5, 1.6]]         [1]   
67  [[6.3, 3.3, 4.7, 1.6]]        [1]  [[6.1, 3.0, 4.6, 1.4]]         [1]   
96  [[6.3, 3.3, 4.7, 1.6]]        [1]  [[6.1, 3.0, 4.9, 1.8]]         [2]   
51  [[6.3, 3.3, 4.7, 1.6]]        [1]  [[5.9, 3.2, 4.8, 1.8]]         [1]   

    dist  
37  0.26  
63  0.37  
67  0.42  
96  0.46  
51  0.47  

我想在“ train_label”列(任意一个)中找到模式值并获取其索引。接下来,我想根据该索引在“ test_label”处找到该值。我该怎么做?

我尝试使用df.mode(),但没有成功。

5 个答案:

答案 0 :(得分:2)

首先,在火车列中找到模式值的索引:

 df.loc[:, 'train_label'] = df['train_label'].apply(lambda x: x[0])
 df.loc[:, 'test_label'] = df['test_label'].apply(lambda x: x[0])

 tr_mode_idx = df['train_label'].mode().index.values

然后根据该索引找到test_label的值:

 df.loc[tr_mode_index, 'test_label']

答案 1 :(得分:0)

您首先需要整理数据,例如:

>>> df["train_label"]=df["train_label"].apply(lambda x: x[0])
>>> df
    dist  test_label  train_label                  x_test                 x_train
37  0.26           1            1  [[6.3, 3.3, 4.7, 1.6]]  [[6.4, 3.2, 4.5, 1.5]]
63  0.37           1            1  [[6.3, 3.3, 4.7, 1.6]]  [[6.0, 3.4, 4.5, 1.6]]
67  0.42           1            1  [[6.3, 3.3, 4.7, 1.6]]  [[6.1, 3.0, 4.6, 1.4]]
96  0.46           1            2  [[6.3, 3.3, 4.7, 1.6]]  [[6.1, 3.0, 4.9, 1.8]]
51  0.47           1            1  [[6.3, 3.3, 4.7, 1.6]]  [[5.9, 3.2, 4.8, 1.8]]

然后运行df.mode()

>>> df.mode(numeric_only=True)
   dist  test_label  train_label
0  0.26         1.0          1.0
1  0.37         NaN          NaN
2  0.42         NaN          NaN
3  0.46         NaN          NaN
4  0.47         NaN          NaN

答案 2 :(得分:0)

df.test_label[df.train_label.isin(df.train_label.mode())]

结果:

37    [1]
63    [1]
67    [1]
51    [1]

答案 3 :(得分:0)

我认为以上答案都不是解决此问题的最佳方法。我建议您使用布尔索引来查找与模式值相对应的列子集。这样,您还将获得他们的索引。然后,您只需将这些索引值输入到其他任何列中,即可在这些索引处找到它们的值。

因此,它可以简化为一行代码:

df['test_label'].loc[df['train_label'][df['train_label'] == df['train_label'].mode()[0]].index]

答案 4 :(得分:0)

所以我创建了一个数据框并选择了列和

df=pd.DataFrame({"A":[14,4,5,4,1], 
                 "B":[5,2,54,3,2], 
                 "C":[20,20,7,3,8], 
                 "train_label":[14,3,6,2,6]}) 
X=df['train_label'].mode()
"""
        A   B   C  train_label
0  14   5  20           14
1   4   2  20            3
2   5  54   7            6
3   4   3   3            2
4   1   2   8            6

"""
for i in X:
   print(df['train_label'].loc[df['train_label']==i].index)
  

输出

Int64Index([2, 4], dtype='int64')