Python 如何执行数据帧的条件合并?
我有两个数据帧,Python 如何执行数据帧的条件合并?,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,df1: group value g1 A g1 B g1 C g1 D g2 B g2 C g2 E g3 A g3 D g3 E g4 B g4 D ... 和df2: value1 value2 A B A C B C B D ... 我想通过将列value与va
df1
:
group value
g1 A
g1 B
g1 C
g1 D
g2 B
g2 C
g2 E
g3 A
g3 D
g3 E
g4 B
g4 D
...
和df2
:
value1 value2
A B
A C
B C
B D
...
我想通过将列value
与value1
和value2
合并来合并df1
和df2
,即:
group value1 value2
g1 A B
g1 A C
g1 B C
g2 B C
g1 B D
g4 B D
...
如图所示,group
仅当两个值同时对应于df1
中的同一组时,才会说明两列value1
和value2
df = df1.merge(df2, left_on='value', right_on='value1', how='inner')
df = df.merge(df2, left_on='value', right_on='value2', how='inner')
df = df.drop(['value'], axis=1)
问题是,我的实际数据帧df1
和df2
非常大,每次我尝试运行代码时,会话都会崩溃(更不用说,我不太确定我的代码一开始是否正确)
你知道如何优化这个过程(并确认我的方法是否正确)吗?第二次合并需要什么?一个还不够吗
df = df1.merge(df2, how='inner', left_on=['value'], right_on=['value1']).drop(columns=['value'])
print(df)
group value1 value2
0 g1 A B
1 g1 A C
2 g3 A B
3 g3 A C
4 g1 B C
5 g1 B D
6 g2 B C
7 g2 B D
8 g4 B C
9 g4 B D
第二次合并需要什么?一个还不够吗
df = df1.merge(df2, how='inner', left_on=['value'], right_on=['value1']).drop(columns=['value'])
print(df)
group value1 value2
0 g1 A B
1 g1 A C
2 g3 A B
3 g3 A C
4 g1 B C
5 g1 B D
6 g2 B C
7 g2 B D
8 g4 B C
9 g4 B D
您的第二个merge语句应该是:df=df.merge(df2,left_on='value',right_on='value2',how='inner')您的第二个merge语句应该是:df=df.merge(df2,left_on='value',right_on='value2',how='inner')问题是,如果我这样做,我会得到一些“错误合并”的行。例如,第三行和第四行(
g3
,A
,B
)(g3
,A
,C
)不正确,因为A
对应于g3
,但df1
中的B
和C
。问题是,如果我这样做,我会得到一些“不正确合并”的行。例如,第三行和第四行(g3
,A
,B
)(g3
,A
,C
)不正确,因为A
对应于g3
,但df1
中的B
和C
)。