同时基于多个参数过滤数据帧

时间:2019-02-25 23:19:17

标签: python pandas dataframe

让我们说我有一个数据框:

df = pd.DataFrame({"a": range(1,5), "b": range(6, 10), "c": range(11, 15) , "d": range(15, 19)})

我想根据构成坐标点的两列的值来过滤此数据帧。假设c,d分别是x和y坐标。但是,我想检查是否给出了数据框中的点列表,这些点是否落在x坐标列表和y坐标列表的值之内。

x_coord = [4,12,13,17,19]
y_coord = [16,18,25,29,32]

使用熊猫的“ isin”功能,如何同时解析数据帧的c列和d列,并对照列表中的值进行检查? (我希望能够对大型数据帧使用此解析方法)

想要的输出:包含原始数据帧整行的数据帧,该数据帧同时具有x和y列表中的c和d值。

1 个答案:

答案 0 :(得分:1)

您可以通过创建一个新列作为其他两个的元组并在该列中使用isin来做到这一点:

In[0]: df['coords'] = list(zip(df['c'], df['d']))
     : df[df['coords'].isin(zip(x_coord, y_coord))]

Out[0]:    
a  b   c   d     e
0  1  6  11  15  NaN
1  2  7  12  16  NaN
2  3  8  13  17  NaN
3  4  9  14  18  NaN

或者您可以使用坐标创建新的数据框,并使用inner_join方法仅获取匹配的行。

In[0]: df = pd.DataFrame({"a": range(1,5), "b": range(6, 10), "c": range(11, 15) , "d": range(15, 19), "e": np.nan})

     : x_coord = range(11, 15) 
     : y_coord = range(15, 19) 

     : coords = pd.DataFrame(list(zip(x_coord, y_coord)), columns=['c', 'd'])
     : df.merge(coords, on=['c', 'd'], how='inner')

Out[0]:    
    a  b   c   d     e
    0  1  6  11  15  NaN
    1  2  7  12  16  NaN
    2  3  8  13  17  NaN
    3  4  9  14  18  NaN