Новый столбец df, который является текущим значением df1, деленным на значение df2 - PullRequest
0 голосов
/ 21 мая 2018

Рассмотрим эти 2 кадра данных:

df1 - наблюдаемые в национальном масштабе миль на галлон

state   make    model   fuel    mpg
FL  honda   fit diesel  43
FL  honda   fit gas 33
FL  vw  golf    diesel  48
FL  vw  golf    gas 35
FL  ford    fiesta  diesel  40
FL  ford    fiesta  gas 36
FL  toyota  corolla diesel  44
FL  toyota  corolla gas 38

df2 - стандарты CAFE

make    model   fuel    mpg
honda   fit diesel  43
honda   fit gas 33
vw  golf    diesel  48
vw  golf    gas 35
ford    fiesta  diesel  40
ford    fiesta  gas 36
toyota  corolla diesel  44
toyota  corolla gas 38
nissan  sentra  diesel  39
nissan  sentra  gas 29

Я хочу создать новый столбец в df1 ['avg'], который представляет собой наблюдаемую миль на галлон, деленную на стандартную цифру CAFE для марки, модели, топлива.

Вот подход, который я пробовал грубой силой:

make_list = ['ford', 'nissan']
model_list = ['focus', 'sentra']
fuel_list = ['gas', 'diesel']

df3 = df2.loc[df2['make'].isin(make_list)]
df3 = df2.loc[df2['model'].isin(model_list)]
df3 = df2.loc[df2['fuel'].isin(fuel_list)]
goal = df3.iloc[0]['mpg']
print goal

for make in make_list:
    for model in model_list:
        for fuel in fuel_list:
            df1['avg'] = df1['mpg'] / goal

На самом деле это нечто большее, чем это, но я собрал их вместе, чтобы продемонстрировать.- Спасибо - это мой первый пост / вопрос, так что будьте нежнее.

1 Ответ

0 голосов
/ 21 мая 2018

Это один из способов.Хитрость заключается в том, чтобы установить индексы для создания и сопоставления рядов от одного кадра данных к другому.

Обратите внимание, что ваши данные по df1 и df2 выглядят идеально выровненными, поэтому соотношение равно 1,0 для каждой строки.

idx = ['make', 'model', 'fuel']

s = df2.set_index(idx)['mpg'].dropna()

df1['std'] = df1.set_index(idx).index.map(s.get)
df1['ratio'] = df1['mpg'] / df1['std']

print(df1)

  state    make    model    fuel  mpg  std  ratio
0    FL   honda      fit  diesel   43   43    1.0
1    FL   honda      fit     gas   33   33    1.0
2    FL      vw     golf  diesel   48   48    1.0
3    FL      vw     golf     gas   35   35    1.0
4    FL    ford   fiesta  diesel   40   40    1.0
5    FL    ford   fiesta     gas   36   36    1.0
6    FL  toyota  corolla  diesel   44   44    1.0
7    FL  toyota  corolla     gas   38   38    1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...