У меня есть два фрейма данных с заголовками следующим образом:
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.