Python [pandas]:按另一个数据帧的索引选择某些行

时间:2018-02-19 11:13:50

标签: python pandas dataframe

我有一个数据框,我只选择包含df1.index的索引值的行。

例如:

$form = $this->createForm(UserType::class, $user, array(
    'is_admin' => $this->isGranted('ROLE_ADMIN'),
);

和这些索引

In [96]: df
Out[96]:
   A  B  C  D
1  1  4  9  1
2  4  5  0  2
3  5  5  1  0
22 1  3  9  6

我想要这个输出:

In[96]:df1.index
Out[96]:
Int64Index([  1,   3,   4,   5,   6,   7,  22,  28,  29,  32,], dtype='int64', length=253)

感谢

2 个答案:

答案 0 :(得分:14)

使用isin

df = df[df.index.isin(df1.index)]

或获取所有交叉索引并按loc选择:

df = df.loc[df.index & df1.index]
df = df.loc[np.intersect1d(df.index, df1.index)]
df = df.loc[df.index.intersection(df1.index)]
print (df)
    A  B  C  D
1   1  4  9  1
3   5  5  1  0
22  1  3  9  6

编辑:

  

我尝试了解决方案:df = df.loc [df1.index]。你认为这个解决方案是否正确?

解决方案不正确:

df = df.loc[df1.index]
print (df)

      A    B    C    D
1   1.0  4.0  9.0  1.0
3   5.0  5.0  1.0  0.0
4   NaN  NaN  NaN  NaN
5   NaN  NaN  NaN  NaN
6   NaN  NaN  NaN  NaN
7   NaN  NaN  NaN  NaN
22  1.0  3.0  9.0  6.0
28  NaN  NaN  NaN  NaN
29  NaN  NaN  NaN  NaN
32  NaN  NaN  NaN  NaN
C:/Dropbox/work-joy/so/_t/t.py:23: FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
  print (df)

答案 1 :(得分:0)

现在可以将索引传递到.loc的行索引器/切片器,您只需要确保也指定列即可,即:

df = df.loc[df1.index, :]  # works

而不是

df = df.loc[df1.index] # won't work

IMO这与.loc的预期用法更加整洁/一致