根据来自不同数据框的两列条件将列相乘?

我有两个数据框,如下所示:


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()但它不起作用。关于如何实现这一目标的任何提示?


慕田峪9158850
浏览 100回答 3
3回答

慕哥6287543

使用索引匹配和divmatch_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.0CH       Geneva        100.0         Zurich        100.0dtype: float64

Smart猫小萌

您还可以使用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)   area0      US  Washington  1000                 10  100.01      US       Texas  5000                 50  100.02      CH      Geneva   500                  5  100.03      CH      Zurich   500                  5  100.0

翻翻过去那场雪

你也可以像下面这样使用合并dfB["Area"] = dfB.merge(dfA, on=["Country", "City"], how="left")["Pop"] / dfB["Density (pop/km2)"] dfB
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python