我有一个Pandas数据框names
,其中包含一个名称为
names
A
B
C
D
我有另一个Pandas数据框results
,其中包含匹配数据,其中名称可以显示在两列中,即wname
或lname
。此外,此数据框包含Id
和result
列:
id wname lname result
1 A B X
1 B C Y
1 C D Z
2 C D Y
2 D A Y
2 A B Z
此外,我有一个字典pdict
,name
数据框中的每个names
都包含我感兴趣的id
数据框中的results
:
{A: 1, B: 1, C: 2, D: 2}
我现在想合并两个数据框names
和results
,如下所示:
results
列或name
列中显示name
,则wname
的所有行都应加入相应的lname
results
results
name
列相关,则只应加入id
行。这可以在pdict
词典中查找。结果应如下所示:
names id wname lname result
A 1 A B X
B 1 A B X
B 1 B C Y
C 2 C D Y
D 2 C D Y
D 2 D A Y
我想尽可能提高效率,因为我有几千个名字和结果需要合并。
我知道如何使用pd.merge
加入一列。但是,如何在wname
或lname
列上执行此操作?我如何只加入与dict中results
相关联的右侧(name
)的行?
修改
感谢this,我现在知道如何在/ wname
和lname
列上进行联接。我的最后一个问题是在dict中查找。我可以在后处理步骤中执行此操作,但出于性能原因,如果results
中不必要的行不会首先合并,我认为会好得多。谢谢你的帮助。
答案 0 :(得分:1)
您可以根据条件选择数据,并在合并后将其存储在数据框中,即
pdict = {"A": 1, "B": 1, 'C': 2, 'D': 2}
df2['id'] = df2['names'].map(pdict)
df = df2.merge(df)
df3 = df[(df['names']==(df['wname'])) | (df['names'] == df['lname'])]
输出:
names id wname lname result 0 A 1 A B X 3 B 1 A B X 4 B 1 B C Y 6 C 2 C D Y 9 D 2 C D Y 10 D 2 D A Y
您可以使用df3 = df3.reset_index(drop=True)
希望有所帮助