合并值不完全相同的Pandas DataFrame

时间:2018-07-16 09:38:05

标签: python pandas dataframe merge

我有两个DataFrame:
第一个(sp_df)

X   Y  density   keep  mass  size
10  20    33     False    23    23
3   2     52     True     5     5
1.2 3     35     False    25    52

第二个(ep_df)

X      Y     density  keep  mass  size
2.1   1.1      55     True   4.0   4.4
1.1   2.9      60     False  24.8  54.8
9.0   25.0     33     False  22.0  10.0

现在我需要将它们与它们的X / Y位置合并成这样:

X-SP Y-SP density-SP ........ X-EP Y-EP density-EP......
 1.5  2.0    30                1.0  2.4    28.7

因此,使用上面显示的数据,您将得到如下内容:

X-SP   Y-SP  density-SP   keep-SP  mass-SP  size-SP X-EP  Y-EP    density-EP  keep-EP  mass-EP  size-EP
3       2       52          True     5         5     2.1   1.1      55        True       4.0      4.4
1.2     3       35          False    25       52     1.1   2.9      60        False      24.8     54.8
10      20      33          False    23       23     9.0  25.0      33        False      22.0     10.0

我的问题是,这些值通常不相同。所以我需要某种比较,不同数据框中的两列最有可能是相同的。不幸的是,我不知道如何完成这项工作。
有任何提示,建议吗?预先感谢

1 个答案:

答案 0 :(得分:2)

您可以像笛卡尔积一样合并两个数据框。这将形成一个数据帧,其中第一数据帧的每一行与第二数据帧的每一行相连。比删除在两个数据框的X值之间具有更大差异的行。希望以下代码有帮助,

import pandas as pd
#cartesian_product
sp_df['key'] = 1
ep_df['key'] = 1
df = pd.merge(sp_df, ep_df, on='key', suffixes=['_sp', '_ep'])
del df['key']

##  taking difference and removing rows 
##  with difference more than 1
df['diff'] = df['X_sp'] - df['X_ep']
drop=df.index[df["diff"] >= 1].tolist()
df=df.drop(df.index[drop])
df

修改后的代码:

#cartesian_product
sp_df['key'] = 1
ep_df['key'] = 1
df = pd.merge(sp_df, ep_df, on='key', suffixes=['_sp', '_ep'])
del df['key']

##  taking difference and removing rows 
##  with difference more than 1
df['diff'] = df['X_sp'] - df['X_ep']
drop=df.index[df["diff"] >= 1.01].tolist()
drop_negative=df.index[df["diff"] <= 0 ].tolist()
droped_values=drop+drop_negative
df=df.drop(df.index[droped_values])
df