首页 > 解决方案 > 通过比较两个 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学习的初始阶段,不知道如何解决这个问题。

提前致谢 !!

标签: pandasloopsdataframeif-statement

解决方案


这应该这样做:

要获取所需值的地图,您可以使用:

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

推荐阅读