pandas - 通过比较两个 pandas 数据框创建一列
问题描述
您好,我正在尝试通过从数据框列中复制值来在数据框中创建一个新列,这样如果另一列的值满足基于另一个数据框中其他两列的列的条件 a 。
为了更深入地了解情况,这里有两个数据框
df1:
Time_Ratio time_elapsed delta_retention
Time_Ratio time_elapsed delta_retention
0.22 0.05 0.000642
0.23 0.07 0.000693
0.24 1.75 0.000740
0.25 3.75 0.000784
0.26 4.50 0.000825
0.27 7.25 0.000725
0.74 277.50 0.000593
0.75 281.25 0.000557
0.76 285.00 0.000523
0.77 288.75 0.000489
df2:
Start End Confidence
0.000000 1.416666 0.319943
0.000000 1.416666 0.424269
0.000000 1.416666 0.605917
0.000000 1.416666 0.602294
0.000000 1.416666 0.562171
0.000000 1.416666 0.790947
0.000000 1.416666 0.545534
1.433333 3.616666 0.618783
1.433333 3.616666 0.803730
1.433333 3.616666 0.385044
3.633333 7.700000 0.490057
3.633333 7.700000 0.685507
239.850000 340.716666 0.937618
239.850000 340.716666 0.829939
239.850000 340.716666 0.852264
239.850000 340.716666 0.820325
我想要做的是找到开始和结束之间的所有时间的累积增量保留在开始和结束之间。这是最终数据框的样子
Start End Confidence cum_delta_retention
0.000000 1.416666 0.319943 0.000642 + 0.000693
0.000000 1.416666 0.424269 0.000642 + 0.000693
0.000000 1.416666 0.605917 0.000642 + 0.000693
0.000000 1.416666 0.602294 0.000642 + 0.000693
0.000000 1.416666 0.562171 0.000642 + 0.000693
0.000000 1.416666 0.790947 0.000642 + 0.000693
0.000000 1.416666 0.545534 0.000642 + 0.000693
1.433333 3.616666 0.618783 0.000740
1.433333 3.616666 0.803730 0.000740
1.433333 3.616666 0.385044 0.000740
3.633333 7.700000 0.490057 0.000784 + 0.000825 + 0.000725
3.633333 7.700000 0.685507 0.000784 + 0.000825 + 0.000725
239.850000 340.716666 0.937618 0.000593 + 0.000557 + 0.000523 + 0.000489
239.850000 340.716666 0.829939 0.000593 + 0.000557 + 0.000523 + 0.000489
239.850000 340.716666 0.852264 0.000593 + 0.000557 + 0.000523 + 0.000489
239.850000 340.716666 0.820325 0.000593 + 0.000557 + 0.000523 + 0.000489
我希望有人能帮我弄清楚如何解决这个问题。我处于python学习的初始阶段,不知道如何解决这个问题。
提前致谢 !!
解决方案
这应该这样做:
要获取所需值的地图,您可以使用:
df1_map = df1.set_index('time_elapsed')['delta_retention'].to_dict()
这给了你:
{0.05: 0.000642,
0.07: 0.0006929999999999999,
1.75: 0.00074,
3.75: 0.000784,
4.5: 0.000825,
7.25: 0.000725,
277.5: 0.000593,
281.25: 0.000557,
285.0: 0.000523,
288.75: 0.000489}
现在您可以创建一个您想要的列来映射介于Start
和之间的值End
:
df2['cum_delta_retention'] = df2.apply(lambda x: ' + '.join([f'{v:.6f}' for k, v in df1_map.items() if k >= x.Start and k <= x.End]), axis=1)
这会给你:
Start End Confidence cum_delta_retention
0 0.000000 1.416666 0.319943 0.000642 + 0.000693
1 0.000000 1.416666 0.424269 0.000642 + 0.000693
2 0.000000 1.416666 0.605917 0.000642 + 0.000693
3 0.000000 1.416666 0.602294 0.000642 + 0.000693
4 0.000000 1.416666 0.562171 0.000642 + 0.000693
5 0.000000 1.416666 0.790947 0.000642 + 0.000693
6 0.000000 1.416666 0.545534 0.000642 + 0.000693
7 1.433333 3.616666 0.618783 0.000740
8 1.433333 3.616666 0.803730 0.000740
9 1.433333 3.616666 0.385044 0.000740
10 3.633333 7.700000 0.490057 0.000784 + 0.000825 + 0.000725
11 3.633333 7.700000 0.685507 0.000784 + 0.000825 + 0.000725
12 239.850000 340.716666 0.937618 0.000593 + 0.000557 + 0.000523 + 0.000489
13 239.850000 340.716666 0.829939 0.000593 + 0.000557 + 0.000523 + 0.000489
14 239.850000 340.716666 0.852264 0.000593 + 0.000557 + 0.000523 + 0.000489
15 239.850000 340.716666 0.820325 0.000593 + 0.000557 + 0.000523 + 0.000489
推荐阅读
- c# - 如何在 Xamarin Forms Android 应用程序中调用手动相机模式
- python - 使用 GridsearchCV 为管道中的最佳模型提取 MLPRegressor 属性 (n_iter_)?
- java - JPQL 查询错误 - 休眠多对多关系
- ios - 如何检查是否可以从 iOS swift 访问 Azure blob 容器
- ios - 返回具有关联类型的协议
- python-3.x - 使用 Python 在 AWS Lambda 中创建 HTML 到 PDF
- angular - 匹配接口与本地存储项
- excel - 在 VBA 中使用带附件的范围发送多封电子邮件
- javascript - 如何使表格行可单击以显示隐藏的行内容?
- excel - 如何通过VBA在单元格中插入带有“-”或“$”等特殊字符的公式?