我想基于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
答案 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()
函数也可以做到这一点。