Как сравнить значения строк выбранных столбцов с такими же столбцами в другом кадре данных? - PullRequest
1 голос
/ 15 октября 2019

У меня есть два фрейма данных с заголовками следующим образом:

df1 = pd.DataFrame(columns=['STATE', 'COUNTY', 'QUANTITY'])
df2 = pd.DataFrame(columns=['FIPS', 'STATE', 'COUNTY'])

Я хочу создать 3-й фрейм данных:

df3 = pd.DataFrame(columns=['FIPS', 'QUANTITY']) 

Так, чтобы каждая строка в df1 имела свое состояниеи значения округов сравнивали каждую строку в df2, пока не было найдено совпадение. Как только совпадение найдено, значение 'FIPS' из df2 и значение 'QUANTITY' из df1 будут добавлены к df3.

По сути, мне нужен фрейм данных, который имеет значения FIPS и Количественные значения для каждого округа / штата, а CSV, который я читаю, не имеет значений FIPS.

Код:

import pandas as pd
import numpy as np
a = [['1', '5', '10'], ['2', '6', '12'], ['3', '7', '11']]
b = [['005', '2', '6'], ['101', '1', '5'], ['201', '3', '7']]
df1 = pd.DataFrame(a, columns=['STATE', 'COUNTY', 'QUANTITY'])
df2 = pd.DataFrame(b, columns=['FIPS', 'STATE', 'COUNTY'])
df3 = pd.DataFrame(columns=['FIPS', 'QUANTITY'])
print(df1)
print(df2)
df3['QUANTITY'] = np.where((df1['STATE'] == df2['STATE']) & 
(df1['COUNTY'] == df2['COUNTY'])
                 , df1['QUANTITY'], np.nan)
df3['FIPS'] = np.where((df1['STATE'] == df2['STATE']) & (df1['COUNTY'] 
== df2['COUNTY'])
                 , df2['FIPS'], np.nan)

имеет результат:

    STATE COUNTY QUANTITY
0     1      5       10
1     2      6       12
2     3      7       11
   FIPS STATE COUNTY
0  005     2      6
1  101     1      5
2  201     3      7
   FIPS QUANTITY
0  NaN      NaN
1  NaN      NaN
2  201       11

Я ищу что-то, что дает мне:

    STATE COUNTY QUANTITY
0     1      5       10
1     2      6       12
2     3      7       11
   FIPS STATE COUNTY
0  005     2      6
1  101     1      5
2  201     3      7
   FIPS QUANTITY
0  101      10
1  005      12
2  201      11

Мне удобно делать такие вычисления в VBA, C ++и MATLAB, однако, я понятия не имею, как сравнивать элементарные индексы структур данных в Python.

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Используйте DataFrame.merge с внутренним объединением по умолчанию, а затем выберите столбцы по подмножеству:

df3 = df1.merge(df2, on=['STATE','COUNTY'])[['FIPS','QUANTITY']]
print (df3)
  FIPS QUANTITY
0  101       10
1  005       12
2  201       11
0 голосов
/ 15 октября 2019

Может быть, вы можете попробовать что-то вроде этого:

df3 = pd.merge(df1, df2, left_on = ['STATE', 'COUNTY'], right_on= ['STATE', 'COUNTY']) # merge the two dataframes with STATE and COUNTY as join keys
df3 =  df3.drop(['STATE', 'COUNTY'], axis = 1)  # drop columns you don't need
df3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...