根据第二个DataFrame的顺序和命名减少一个DataFrame的形状

时间:2019-02-09 06:43:47

标签: python pandas

我有两个熊猫DataFrame。第一个具有形状(8190、161),第二个具有形状(14026、3)。两个数据集中的第一列均包含名称。第一个数据框中的所有名称都出现在第二个数据框中。我的目标是通过仅保留第一个DataFrame中存在的名称和相应的行值,并按照与第一个相同的顺序,将第二个DataFrame形状减少到第一个。 这里的顺序是指行名和这些行中的所有值。

这样做

KStream<Integer, Integer> stream = events.map((key, value) -> new KeyValue<Integer, Integer>(value.getpid(), value.getUserId()));
KStream<Integer, Integer> output = stream.groupByKey().
            aggregate((Initializer<Set<Integer>>) HashSet::new,
                    (k, v, current) -> {current.add(v); return current;}).mapValues(Set::size).toStream();

我可以获取第二个DataFrame中存在的名称,而第一个中不存在。当我打印len(y)时,它给了我5836,这是 第二个DataFrame中存在的其他行数。

这里,我的问题是将这样的行从第二个DataFrame映射到第一个,并删除第二个DataFrame中的此类行。

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

您可以看到第一个和第二个DataFrame中的名称最后以相同的顺序排列。

谢谢。

更新: 帖子“ Pandas Merging 101”说明了如何合并DataFrame,但是我只想返回第二个DataFrame。

1 个答案:

答案 0 :(得分:0)

按照jezrael的建议,我通过以下操作获得了预期的结果:

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

感谢jezreal。