通过将一列的所有值与另一数据帧的列的所有值进行比较来对数据帧进行切片

时间:2018-10-28 23:23:23

标签: python pandas dataframe slice

我对切片数据帧有疑问。 我有两个数据帧:索引为3447,4024的halo_field ...

           H_masa  N_subs      ...                 H_z             rh
3447  1.066437e+11       1      ...        88419.632812  160354.430049
4024  4.423280e+11       1      ...        49013.289062   65239.433084
4958  3.171903e+11       1      ...        23239.701172   48248.401956
5749  2.817211e+11       1      ...        46585.765625   65032.216212
6512  2.471275e+11       1      ...        93403.398438  123058.838527

并且我有dataframe subhalo,其中一列名为“ halo_index”,索引到数据帧halo中,halo_field是切片(因此我们拥有这样的halo_field索引)-这是subhalo.halo_index的打印输出(在右侧) :

0                0
1                0
2                0
3                0
4                0
            ...   
4366516    7713551
4366517    7713552
4366518    7713553

我想将subhalo数据帧切片为dataframe subhalo_field,以便它仅包含具有halo_index列值的行,该值也包含在halo_field.index中。问题是,这两列的长度当然不一样,我不能这样做(比较行与将一列的所有值与另一列的所有值进行比较):

subhalo_field=subhalo[subhalo.halo_index==halo_field.index].copy()

我收到此错误:

File "group_sh.py", line 139, in <module>
subhalo_field=subhalo[subhalo.halo_index==halo_field.index].copy()
File "/usr/local/lib/python2.7/dist-packages/pandas/core/ops.py", line 1223, in wrapper
raise ValueError('Lengths must match to compare')
ValueError: Lengths must match to compare

如何切片我的subhalo数据帧,以便可以将subhalo.halo_index与halo_field.index进行比较,然后仅将这些subhalos复制到具有halo_index和halo_field.index的subhalo_fields中?

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您可能正在寻找merge的索引上的halo_fieldhalo_index的{​​{1}}列(默认为内部联接行为):

subhalo

答案 1 :(得分:0)

我找到了解决方法:

subhalo_field=subhalo[subhalo.halo_index.isin(halo_field.index)].copy()