Divide/Multiply DF 中的某些行被其他具有条件的 Df
Divide/Multiply certain rows in a DF by other Df with conditions
我得到了 2 个 df
第一个按国家和年份划分的购买价格
year
purchase
country
1999
23
Canada
2000
24
Canada
1999
21
China
2999
22
China
其他按年份销售价格
year
price
1999
25
2000
27
所以我想得到这样的列比率:
year
purchase
country
ratio
1999
23
Canada
1.086
2000
24
Canada
1.25
1999
21
China
1.19
2999
22
China
1.22
这就像在年份相同的情况下除以售价。
我试过类似的东西:
np.divide(selling["price"],purchase.Price, where= selling["year"]== purchase["years"])
但是没有成功。
我试图在不创建额外元素的情况下只用一行代码来完成。
因为我认为我可以通过在
这样的年份创建另一个变量 运行 来解决它
for years in purchase.years:
purchase["ratio"] = np.divide(selling[selling.years].Price,purchase[purchase.years == years].Price)
您可以将两个表连接在一起。
merged_df = df1.merge(df2,
on = ['year'],
how = 'left')
merged_df['ratio'] = merged_df['price']/merged_df['purchase']
merged_df.drop('price', axis = 1)
你可以做到 reindex
和 rdiv
df1['ratio'] = df1['purchase'].rdiv(df2.set_index('year')['price'].reindex(df1['year']).values)
df1
Out[316]:
year purchase country ratio
0 1999 23 Canada 1.086957
1 2000 24 Canada 1.125000
2 1999 21 China 1.190476
3 2999 22 China NaN
我得到了 2 个 df 第一个按国家和年份划分的购买价格
year | purchase | country |
---|---|---|
1999 | 23 | Canada |
2000 | 24 | Canada |
1999 | 21 | China |
2999 | 22 | China |
其他按年份销售价格
year | price |
---|---|
1999 | 25 |
2000 | 27 |
所以我想得到这样的列比率:
year | purchase | country | ratio |
---|---|---|---|
1999 | 23 | Canada | 1.086 |
2000 | 24 | Canada | 1.25 |
1999 | 21 | China | 1.19 |
2999 | 22 | China | 1.22 |
这就像在年份相同的情况下除以售价。 我试过类似的东西:
np.divide(selling["price"],purchase.Price, where= selling["year"]== purchase["years"])
但是没有成功。
我试图在不创建额外元素的情况下只用一行代码来完成。 因为我认为我可以通过在
这样的年份创建另一个变量 运行 来解决它for years in purchase.years:
purchase["ratio"] = np.divide(selling[selling.years].Price,purchase[purchase.years == years].Price)
您可以将两个表连接在一起。
merged_df = df1.merge(df2,
on = ['year'],
how = 'left')
merged_df['ratio'] = merged_df['price']/merged_df['purchase']
merged_df.drop('price', axis = 1)
你可以做到 reindex
和 rdiv
df1['ratio'] = df1['purchase'].rdiv(df2.set_index('year')['price'].reindex(df1['year']).values)
df1
Out[316]:
year purchase country ratio
0 1999 23 Canada 1.086957
1 2000 24 Canada 1.125000
2 1999 21 China 1.190476
3 2999 22 China NaN