Python Dataframe-我的函数没有返回任何内容
我有两个数据帧: 计算的能量(时间戳列仅使用3个十进制值格式化,以确保没有任何隐藏值干扰简单的数学计算): df_测试: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
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