在第二个DataFrame的顺序和命名的基础上缩小一个DataFrame的形状



我有两个Panda DataFrames。第一个是形状(8190,161),第二个是形状的(14026,3)。两个数据集中的第一列都包含名称。第一个数据帧中的所有名称都存在于第二个数据帧。我的目标是通过只保留第一个DataFrame中的名称和相应的行值,将第二个DataFrame形状减少为第一个,其顺序与第一个相同。这里按顺序,我指的是行名和这些行中的所有值。

通过这样做

y2 = df2.iloc[:, 0]
y1 = df1.iloc[:, 0] 
y = [i for i in set(y2) if i not in set(y1)]

我可以得到第二个DataFrame中存在的名称,但第一个数据帧中没有。当我打印len(y)时,它会给我5836,它们是第二数据帧中存在的额外行数。

在这里,我的问题是将这些行从第二个DataFrame映射到第一个,并在第二个数据帧中删除这些行。

At last, df1.head(): 
names                             0 ...   158  159
0  ID-865950       3.0000000000000004 ...   Nan  Nan
1  ID-866199                      1.0 ...   Nan  Nan
2  ID-862617                      3.0 ...   Nan  Nan
3  ID-867838                      5.0 ...   Nan  Nan
4  ID-27972                       5.0 ...   Nan  Nan
df2.head():
names              B          C
0  ID-865950         -0.206854    0.0000
1  ID-866199         -0.268366    0.0000
2  ID-862617         -0.368426    0.0000
3  ID-867838         -0.693050    0.0000
4  ID-27972         -2.103586     4.1045

正如您所看到的,第一个和第二个DataFrame中的名称最后顺序相同。

提前谢谢。

更新:文章"Pandas Merging 101"解释了关于合并DataFrame的内容,但我只想返回第二个DataFrame。

通过遵循jezrael的建议,我通过以下操作获得了所需的结果:

df3 = df2[y2.isin(y1)]
df3.sort_values('names')

谢谢jezreal。

最新更新