Python 如何合并具有不同行和列大小的数据帧?

Python 如何合并具有不同行和列大小的数据帧?,python,pandas,Python,Pandas,我想根据dataframe2中的“种族”合并DataFrame1和dataframe2。我只想包括数据帧2的“竞争”,不想包括数据帧1的任何多余的“竞争” 我的代码: cols1 = ['Race', 'Market ID'] df1 = pd.DataFrame(data=betfairevents, columns=cols1) cols2 = ['Race'] df2 = pd.DataFrame(data=tabntgevents, columns=cols2) print(df2) d

我想根据dataframe2中的“种族”合并DataFrame1和dataframe2。我只想包括数据帧2的“竞争”,不想包括数据帧1的任何多余的“竞争”

我的代码:

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
您可以使用熊猫的“.isin”功能

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

您显示的示例输入数据与所需的输出不匹配。但这里有一种执行分析的方法:

# 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()
函数也适用于此。

示例数据如何与输出不匹配?两个数据帧的“Race”列之间没有区别,除了种族名称的大写。
'Cat'=='Cat'
将解析为False,因为python/pandas执行区分大小写的比较。包含
.str().lower()
将执行不区分大小写的比较。您的问题是什么?请看。