Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何执行数据帧的条件合并?_Python_Pandas_Dataframe - Fatal编程技术网

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
)。