我有两个熊猫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。
答案 0 :(得分:0)
按照jezrael的建议,我通过以下操作获得了预期的结果:
df3 = df2[y2.isin(y1)]
df3.sort_values('names')
感谢jezreal。