Python 如何合并具有不同行和列大小的数据帧?
我想根据dataframe2中的“种族”合并DataFrame1和dataframe2。我只想包括数据帧2的“竞争”,不想包括数据帧1的任何多余的“竞争” 我的代码: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
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()
将执行不区分大小写的比较。您的问题是什么?请看。