[英]Computing using two dataframes in Pandas
我正在尝试计算以下内容:
当有
df1(数据速度为字幕的字符速度( char_speed
,开始于start_time
,结束于end_time
):
char_speed start_time end_time
0 34 3 15
1 19 15 21
2 9 21 28
...
和
df2(具有用户监听日志的数据帧,该监听日志从start_time
开始并在end_time
以用户在该时间间隔收听的speed
结束):
start_time end_time speed
0 9.23 20.929 1.0
1 1.4 20.26 1.5
2 20.0 27.6 1.25
...
然后计算每个时间间隔内的总字符数:
start_time end_time speed total_char
0 9.23 20.929 1.0
1 1.4 20.26 1.5
2 20.0 27.6 1.25
...
例如, df2['total_char'].iloc[0]
将是
((15-9.23)*34) + ((20.929-15)*19)
在9.23〜20.929之间,
在9.23〜15之间,速度将为34,
在15〜20.929之间,速度为19
和df2['total_char'].iloc[1]
为
(3-1.4)*0 + ((15-3)*34) + ((20.26-15)*19)
在1.4〜20.26之间,
在1.4〜3期间,在df1中找不到速度,因此为0
在3到15之间,速度为34
在15〜20.26之间,速度为19
我是Pandas的新手,最近我对Pandas如何在短代码和简单代码中高效工作着迷,但我不确定是否有办法在短代码和简单代码中进行计算。 现在,我只能想到一种不使用Pandas函数的方法:调用df2
每一行,然后搜索df1
每一行,然后进行计算。
如果您能告诉我一种使用Pandas进行有效编码的方法,将很有帮助。 否则对功能的任何建议也将有所帮助!
提前致谢! :)
如果您不反对合并数据框,那么apply
轻松实现。
df2 = pd.concat([df1, df2], axis=1, sort=False)
def speed_calc(row):
return ((row['end_time1']-row['start_time1'])*row['char_speed']) + \
((row['end_time2']-row['end_time1'])*row['char_speed'])
df2['total_char'] = df2.apply(speed_calc, axis=1)
这将需要您调整标题名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.