您好,我正在尝试通过从数据帧列中复制值来在数据帧中创建新列,以便如果另一列的值满足条件a,则基于另一个数据帧中其他两列的列。 / p>
为了更直观地介绍这两个数据框,
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学习的初期,不知道如何解决此问题。
谢谢!
答案 0 :(得分:1)
这应该做到:
要获取所需值的映射,可以使用:
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