获取匹配行值的pandas数据帧索引

时间:2016-05-30 21:43:14

标签: python pandas

我必须在pandas AB中使用数据帧:

A:

A = pd.DataFrame({0:[1.24, 8.75, 4.32]})

0    1.24
1    8.75
2    4.32

其中0 1 2 3 4 5是数据帧的索引

和另一个字符串作为索引的数据框:

B = pd.DataFrame({0:[9.43, 1.24, 9.09, 4.32, 8.85]}, index=['p_32','p_21','p_01','p_05','p_76'])

'p_32'    9.43
'p_21'    1.24
'p_01'    9.09
'p_05'    4.32
'p_76'    8.75

A第一列中的所有数字都包含在B中,但不是相反。我希望得到B的行号与A匹配的索引字符串,同时保留A

中的顺序

所以我需要:

'p_21'
'p_76'
'p_05'

2 个答案:

答案 0 :(得分:2)

您可以使用isin()功能:

In [141]: B[B[0].isin(A[0])].index
Out[141]: Index(['p_21', 'p_05', 'p_76'], dtype='object')

In [142]: B[B[0].isin(A[0])]
Out[142]:
         0
p_21  1.24
p_05  4.32
p_76  8.75

数据:

In [139]: A
Out[139]:
      0
0  1.24
1  8.75
2  4.32

In [140]: B
Out[140]:
         0
p_32  9.43
p_21  1.24
p_01  9.09
p_05  4.32
p_76  8.75

答案 1 :(得分:1)

我会通过使用连接操作来处理此程序。首先,在B上使用reset_index使索引成为数据框中的新列。然后使用内部联接使用merge函数将两个数据框组合在一起。确保在连接操作期间禁用排序。新数据框中的索引列将具有您想要的内容。

以下是关于联接http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging

的pandas文档