Умножить столбцы на основе двух условий столбцов из разных фреймов данных? - PullRequest
2 голосов
/ 04 октября 2019

У меня есть два кадра данных, как указано ниже:

dfA = 
Country      City           Pop
US           Washington     1000
US           Texas          5000
CH           Geneva         500
CH           Zurich         500


dfB = 
Country      City           Density (pop/km2)
US           Washington     10
US           Texas          50
CH           Geneva         5
CH           Zurich         5

Я хочу сравнить столбцы Country и City с обоих кадров данных, и когда они совпадают, например:

US Washington & US Washington в обоих кадрах данных, он принимает значение Pop и делит его на Density, чтобы получить новый столбец area в dfB с результирующим делением. Пример результатов первой строки dfB['area km2'] = 100

Я пробовал с np.where(), но это не работает. Любые советы о том, как этого добиться?

Ответы [ 3 ]

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

Использование индекса соответствия и div

match_on = ['Country', 'City']
dfA = dfA.set_index(match_on)
dfA.assign(ratio=dfA.Pop.div(df.set_index(['Country', 'City'])['Density (pop/km2)']))

Country  City      
US       Washington    100.0
         Texas         100.0
CH       Geneva        100.0
         Zurich        100.0
dtype: float64
0 голосов
/ 04 октября 2019

Вы также можете использовать merge, чтобы объединить два кадра данных и разделить как обычно:

dfMerge = dfA.merge(dfB, on=['Country', 'City'])
dfMerge['area'] = dfMerge['Pop'].div(dfMerge['Density (pop/km2)'])
print(dfMerge)

Вывод:

  Country        City   Pop  Density (pop/km2)   area
0      US  Washington  1000                 10  100.0
1      US       Texas  5000                 50  100.0
2      CH      Geneva   500                  5  100.0
3      CH      Zurich   500                  5  100.0
0 голосов
/ 04 октября 2019

Вы также можете использовать слияние, как показано ниже

dfB["Area"] = dfB.merge(dfA, on=["Country", "City"], how="left")["Pop"] / dfB["Density (pop/km2)"]
dfB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...