Python DataFrame - 根据另一个数据帧

时间:2018-06-17 16:04:57

标签: python pandas dataframe

我正在努力解决与数据帧相关的问题。有两个数据帧,df和dff,如下所示

data = np.array([['', 'col1', 'col2'],
            ['row1', 1, 2],
            ['row2', 3, 4]])
df = pd.DataFrame(data=data[1:,1:].astype(int), index=data[1:,0],columns=data[0,1:])


filters=np.array([['', 'col1', 'col2'],
                 ['row1', 1, 1],
                 ['row2', 1, 2],
                 ['row3', 3, 2]])
dff = pd.DataFrame(data=filters[1:,1:].astype(int), index=filters[1:,0],columns=filters[0,1:])

我希望从df中选择行,使得它们的col2值属于可以在具有匹配col1值的dff中找到的值列表。 例如,对于col1值等于1,该列表应为[1,2],对于col1值等于2,列表为[2]。

我解决这个问题的最佳尝试是

df1 = df[df['col2'].isin(dff[dff['col1']==df['col1']]['col2'])]

但结果是

ValueError: Can only compare identically-labeled Series objects

任何帮助将不胜感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

据我了解,您可以简单地aggregate

ndf = dff.groupby('col1').agg(lambda x: list(x)).reset_index()

    col1   col2
0   1      [1, 2]
1   3      [2]

并过滤col1

中不属于df的任何值
ndf[ndf.col1.isin(df.col1)]