如何合并具有不同行和列大小的熊猫数据框?

时间:2020-08-03 04:48:16

标签: python pandas

我想基于dataframe2中的“ Race”合并dataframe 1和dataframe 2。我只想为数据帧2包含'Race',而不想为数据帧1包含任何多余的'Race'。

我的代码:

cols1 = ['Race', 'Market ID']
df1 = pd.DataFrame(data=betfairevents, columns=cols1)
cols2 = ['Race']
df2 = pd.DataFrame(data=tabntgevents, columns=cols2)
print(df2)
dfmerge1 = pd.merge(df1,df2,on='Race',how='inner')

dataframe1的输出:

               Race    Market ID
0      Newcastle R1  1.171771969
1      Newcastle R2  1.171771971
2      Newcastle R3  1.171771973
3      Newcastle R4  1.171771975
4      Newcastle R5  1.171771977
..              ...          ...
139   Launceston R6  1.171772509
140   Launceston R7  1.171772511
141   Launceston R8  1.171772513
142   Launceston R9  1.171772515
143  Launceston R10  1.171772517

dataframe2的输出:

           Race
0  NEWCASTLE R1
1   BALLARAT R1
2    LISMORE R4
3   WARRAGUL R3

所需的合并数据帧输出:

               Race    Market ID
0      Newcastle R1  1.171771969
1      Ballarat R1   1.171771971
2      Lismore R4    1.171771973
3      Warragul R3   1.171771975

2 个答案:

答案 0 :(得分:-1)

您可以在熊猫中使用“ .isin”功能,

merged_df = df1[df1['Race'].isin(df2['Race'])

答案 1 :(得分:-1)

您显示的样本输入数据与所需的输出不匹配。但是,这是执行分析的一种方法:

# create sample data
from io import StringIO
import pandas as pd

data1 = '''index               Race    Market ID
0      Newcastle R1  1.171771969
1      Newcastle R2  1.171771971
2      Newcastle R3  1.171771973
3      Newcastle R4  1.171771975
4      Newcastle R5  1.171771977
139   Launceston R6  1.171772509
140   Launceston R7  1.171772511
141   Launceston R8  1.171772513
142   Launceston R9  1.171772515
143  Launceston R10  1.171772517
'''
df1 = pd.read_csv(StringIO(data1), sep='\s\s+', engine='python').set_index('index')

data2 = '''index           Race
0  NEWCASTLE R1
1   BALLARAT R1
2    LISMORE R4
3   WARRAGUL R3
'''
df2 = pd.read_csv(StringIO(data2), sep='\s\s+', engine='python').set_index('index')

现在找到df1和df2中的“ Race”值(带有布尔掩码)。 .str().lower()执行不区分大小写的比较。

mask = df1['Race'].str.lower().isin(df2['Race'].str.lower().values)
df1[ mask ]

merge()函数也可以做到这一点。