Как объединить pandas фреймов данных с разными размерами строк и столбцов? - PullRequest
0 голосов
/ 03 августа 2020

Я хочу объединить фрейм данных 1 и фрейм данных 2 на основе 'Race's in 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')

Вывод фрейма данных 1:

               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

Вывод фрейма данных2:

           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 голосов
/ 03 августа 2020

Образец входных данных, который вы показываете, не соответствует желаемому результату. Но вот один из способов выполнить анализ:

# 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 (с логической маской). .str().lower() выполняет сравнение без учета регистра.

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

Для этого также подойдет функция merge().

0 голосов
/ 03 августа 2020

Вы можете использовать функцию ".isin" из pandas,

merged_df = df1[df1['Race'].isin(df2['Race'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...