2016-07-01 45 views
2

我有两个数据框,它们的列数相同,并且包含文本数据。问题是,在第二个数据帧中的数据丢失细节:设置Pandas数据框中某一行的值等于另一个数据框中某一行的值

A  B 
1 Bob Hoskins 
2 Laura Hogan 
3 Tom Jones 

    A  B 
1 Bob  x 
2 Bob  x 
3 Bob  x 
4 Laura x 
5 Laura x 
6 Tom  x 

什么是熊猫最快的方式设置“B”列的值在第二个数据帧等于其各自的条件值第一?那么'A'='Bob'将有'B'的行会被设置为Hoskins,Laura还是Hogan等?第二个数据帧也很大,有100,000行,因此快速解决方案是首选。

+0

是值实际上'x'并被解释为失踪? – piRSquared

+0

这只是一个占位符字符串,我用于示例,只是假设其设置为'x' – GreenGodot

回答

3

在第二DF执行左join

output = df2.merge(df1, how = "left", on = "A") 

*所需DF:*

 A  B 
0 Bob Hoskins 
1 Bob Hoskins 
2 Bob Hoskins 
3 Laura Hogan 
4 Laura Hogan 
5 Tom Jones 
+0

@GreenGodot让我知道如果这不适合你。 –

+0

嗨,这种方法的一个问题是,我已经添加了一个或两个额外的列到数据框架。这些只是三个不相关的列,它们在两个数据框中的相应行都具有相同的值。当我运行你的代码时,我得到这些列重复两次(_x和__附加到他们的名字)。之后有没有办法避免修剪数据框? – GreenGodot

2

可以设置A作为索引用于第一数据帧,然后筛选基于行上的指数:

df.set_index('A').loc[df1.A].reset_index() 

#  A   B 
# 0 Bob Hoskins 
# 1 Bob Hoskins 
# 2 Bob Hoskins 
# 3 Laura  Hogan 
# 4 Laura  Hogan 
# 5 Tom  Jones 
相关问题