python - 使用来自另一个数据帧的字符串从 Pandas 数据帧获取索引
问题描述
我必须数据框(df),df1 包含随着时间推移感染数量的国家(2000+ 行),df2 包含人口数量(200 行)的国家。
我一直在尝试将人口数从 df2 变为 df1,以便随着时间的推移将感染转化为感染密度(?)。
在我看来,我必须遍历 df1 的行并检查每个索引到 df2 的 Country 列。如果结果为真,我可以将人口从 df2 复制到 df1。我尝试了多种方法(仅以下一种),但现在不知所措:(...有人可以推动我朝着正确的方向前进吗?
for index, row in df2.iterrows():
df_test = df1['Country'].str.contains(row[0])
使用 df1、df2 和首选结果编辑更新:df1
ObservationDate Country/Region Confirmed
0 -2.118978 Hong Kong 0.0
1 -2.118978 Japan 2.0
2 -2.118978 Macau 1.0
3 -2.118978 Mainland China 547.0
4 -2.118978 South Korea 1.0
df2
0 1
0 China 1.401580e+09
1 India 1.359321e+09
2 United States[c] 3.293798e+08
3 Indonesia 2.669119e+08
4 Brazil 2.111999e+08
df_preferred
ObservationDate Country/Region Confirmed Population
0 -2.118978 Hong Kong 0.0
1 -2.118978 Japan 2.0
2 -2.118978 Macau 1.0
3 -2.118978 Mainland China 547.0 1.401580e+09
4 -2.118978 South Korea 1.0
解决方案
假设您的两个 DataFrame 如下:
Country Date Infection
0 Aaaaa 2020-03-02 10
1 Aaaaa 2020-03-04 20
2 Bbbbb 2020-03-02 15
3 Bbbbb 2020-03-04 20
4 Ccccc 2020-03-02 12
5 Ccccc 2020-03-04 40
Country Population
0 Aaaaa 10000000
1 Bbbbb 35200000
2 Ccccc 48700000
然后,要合并它们并将结果保存在另一个 DataFrame 中,您可以运行:
df3 = df1.merge(df2, on='Country')
得到:
Country Date Infection Population
0 Aaaaa 2020-03-02 10 10000000
1 Aaaaa 2020-03-04 20 10000000
2 Bbbbb 2020-03-02 15 35200000
3 Bbbbb 2020-03-04 20 35200000
4 Ccccc 2020-03-02 12 48700000
5 Ccccc 2020-03-04 40 48700000
要计算感染率,您可以执行:
df3['InfectionRate'] = df3.Infection / df3.Population
推荐阅读
- python - 是否有一个 numpy 函数可以用另一个数组的相同部分替换一个数组
- android - 为什么 MediatorLiveData 没有观察到两个不同的来源?
- javascript - 将脚本加载到 javascript
- excel - 将多个工作簿中的数据收集到主工作簿中 - 来自单元格的路径
- angularjs - AngularJS:仅在某些数据存在时添加 ng-show 属性
- spring - Spring Feign Client JSON解析错误:非法字符
- git - Git引发简单合并的冲突
- java - 发送没有关键值的改造获取请求
- javascript - 为动态创建的输入标签分配和更新值 - jquery
- .net-core - 使用 Magick.Net 生成的 Pdf 文件的 png 是黑色的 #695