我有一个排序的数据框,如下所示:
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()
,但没有成功。
答案 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')