Python Dataframe-我的函数没有返回任何内容

Python Dataframe-我的函数没有返回任何内容,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有两个数据帧: 计算的能量(时间戳列仅使用3个十进制值格式化,以确保没有任何隐藏值干扰简单的数学计算): df_测试: fl_Key time_stamp energy install_prediction 1007 10051 1614556840299 -1 -1 491 10051 1614556819659 -1 -1 1944 10051

我有两个数据帧:

计算的能量(时间戳列仅使用3个十进制值格式化,以确保没有任何隐藏值干扰简单的数学计算):

df_测试:

      fl_Key  time_stamp        energy       install_prediction
1007   10051  1614556840299      -1                  -1
491    10051  1614556819659      -1                  -1
1944   10051  1614556877779      -1                  -1
2227   10051  1614556889099      -1                  -1
677    10051  1614556827099      -1                  -1
2944   10051  1614556917779      -1                  -1
799    10051  1614556831979      -1                  -1
2378   10051  1614556895139      -1                  -1
1877   10051  1614556875099      -1                  -1
487    10051  1614556819499      -1                  -1
我试图从df_测试数据帧中查找fl_键和时间戳,使用它们从energy_计算的数据帧中查找“energy”值。fl_键与fl_键列应完全匹配。时间戳列应位于最小和最大时间戳列之间

fl_键和fl_键名称不同,因此我可以跟踪哪个列来自何处

我有一个简单的方法(我输入raise异常只是为了确保它总是找到匹配项):

最终的结果是,映射是针对某些行进行的,但不是针对所有行:

我得到的df_测试数据帧看起来像(我有一个更大的df_测试版本,但我已经将它缩短到10行来演示这个问题)。我从更大的版本中随机选择了10行-这就是为什么索引编号不正常的原因:

       fl_Key    time_stamp            energy     install_prediction
1007    10051    1614556840299                          -1
491     10051    1614556819659    0.4291915384067029    -1
1944    10051    1614556877779                          -1
2227    10051    1614556889099                          -1
677     10051    1614556827099                          -1
2944    10051    1614556917779                          -1
799     10051    1614556831979                          -1
2378    10051    1614556895139                          -1
1877    10051    1614556875099                          -1
487     10051    1614556819499    0.4291915384067029    -1

我错过了什么?谢谢。

真奇怪。我把你的两个数据帧放到我自己的一个数据帧中,然后运行你的代码。重现你的空白。然后,我把
pdb
放在return语句的前面,它返回的是一个
对象,而不是一个float!事实上,所有行都是对象。我这样说:

返回浮点(能量计算['energy'])

并获得了完整的数据帧

    index   fl_Key  time_stamp  energy  install_prediction
0   1007    10051   1614556840299   0.348   -1
1   491     10051   1614556819659   0.429   -1
2   1944    10051   1614556877779   0.465   -1
3   2227    10051   1614556889099   0.305   -1
4   677     10051   1614556827099   0.406   -1
5   2944    10051   1614556917779   0.340   -1
6   799     10051   1614556831979   0.406   -1
7   2378    10051   1614556895139   0.305   -1
8   1877    10051   1614556875099   0.465   -1
9   487     10051   1614556819499   0.429   -1

把它擦掉。您可以使用
energy\u计算['energy']实现同样的效果。值[0]
,而无需转换为float。

尝试使用
merge

df_new = df_energy.rename(columns={'fl_key': 'fl_Key'})\
                  .merge(df_test[['fl_Key', 'time_stamp']], on='fl_Key', how='left')

print(df_new.loc[df_new['time_stamp']\
      .between(df_new['min_time_stamp'], df_new['max_time_stamp']), 'energy'])
输出:

    energy
21  0.429
29  0.429
34  0.406
36  0.406
50  0.348
92  0.465
98  0.465
113 0.305
117 0.305
145 0.34

@KCI-做得好!谢谢。
    index   fl_Key  time_stamp  energy  install_prediction
0   1007    10051   1614556840299   0.348   -1
1   491     10051   1614556819659   0.429   -1
2   1944    10051   1614556877779   0.465   -1
3   2227    10051   1614556889099   0.305   -1
4   677     10051   1614556827099   0.406   -1
5   2944    10051   1614556917779   0.340   -1
6   799     10051   1614556831979   0.406   -1
7   2378    10051   1614556895139   0.305   -1
8   1877    10051   1614556875099   0.465   -1
9   487     10051   1614556819499   0.429   -1
Since I don't have access to your dataframes, maybe some type weirdness is going on that you should fix.
df_new = df_energy.rename(columns={'fl_key': 'fl_Key'})\
                  .merge(df_test[['fl_Key', 'time_stamp']], on='fl_Key', how='left')

print(df_new.loc[df_new['time_stamp']\
      .between(df_new['min_time_stamp'], df_new['max_time_stamp']), 'energy'])
    energy
21  0.429
29  0.429
34  0.406
36  0.406
50  0.348
92  0.465
98  0.465
113 0.305
117 0.305
145 0.34