我正在努力解决与数据框相关的问题。共有两个数据帧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值属于可在dff中找到的具有匹配col1值的值列表。例如,对于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
任何帮助,将不胜感激。非常感谢。
据我了解,您可以简单地 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)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句