python - 根据两个条件将值从一列复制到具有不同行的另一列
问题描述
我的数据框基本上是这样的:
data = [[11200, 33000,dt.datetime(1995,3,1),10,np.nan], [11200, 33000, dt.datetime(1995,3,2),11, np.nan],[11200, 33000, dt.datetime(1995,3,3),9, np.nan],\
[23400, 45000, dt.datetime(1995,3,1),50, np.nan], [23400, 45000, dt.datetime(1995,3,3),49, np.nan], [33000, 55000, dt.datetime(1995,3,1),60, np.nan], [33000, 55000, dt.datetime(1995,3,2),61, np.nan]]
df = pd.DataFrame(data, columns = ["Identifier", "Identifier2" ,"date", "price","price2"])
输出如下所示:
index Identifier1 Identifier2 date price1 price2
0 11200 33000 1995-03-01 10 nan
1 11200 33000 1995-03-02 11 nan
2 11200 33000 1995-03-03 9 nan
3 23400 45000 1995-03-01 50 nan
4 23400 45000 1995-03-03 49 nan
5 33000 55000 1995-03-01 60 nan
6 33000 55000 1995-03-02 61 nan
请注意,我的索引不是像我的示例 df 那样按升序排序。我想:在 Identifier 1 列中查找 Identifier2 列中的数字(我知道要查找的确切数字)。然后将 price1 的值复制到 price2 相对于正确日期的值,因为缺少某些日期.
我的目标是这样的:
index Identifier1 Identifier2 date price1 price2
0 11200 33000 1995-03-01 10 60
1 11200 33000 1995-03-02 11 61
2 11200 33000 1995-03-03 9 nan
3 23400 45000 1995-03-01 50 nan
4 23400 45000 1995-03-03 49 nan
5 33000 55000 1995-03-01 60 nan
6 33000 55000 1995-03-02 61 nan
我敢肯定这不是太难,但不知何故我不明白。非常感谢您的任何帮助。
解决方案
单程:
df['price2'] = df[['Identifier2', 'date']].apply(tuple, 1).map(df.set_index(['Identifier','date'])['price'].to_dict())
输出:
Identifier Identifier2 date price price2
0 11200 33000 1995-03-01 10 60.0
1 11200 33000 1995-03-02 11 61.0
2 11200 33000 1995-03-03 9 NaN
3 23400 45000 1995-03-01 50 NaN
4 23400 45000 1995-03-03 49 NaN
5 33000 55000 1995-03-01 60 NaN
6 33000 55000 1995-03-02 61 NaN
推荐阅读
- ios - 如何在 Swift 5 中使用数组响应为 API 创建视图模型
- c# - 是否可以从 Web 服务器获取请求数据到控制台应用程序?
- webrtc - 如何在pubnub webrtc lib中获得没有cam的广播连接?
- c - 关于 fputs() 的困惑
- c# - FileStreamResult 对象被释放
- javascript - 如何在 ng-if 中使用动态范围变量
- excel - 循环浏览 Outlook 文件夹中的电子邮件项目以将每个表复制到 Excel
- javascript - ChartJS 悬停工具提示颜色未显示正确颜色
- c# - 如何使 templateURL 滚动到页面的某些部分?
- javascript - JavaScript ES6 - 如何在 Promise.All 中组合 Promise 方法?