繁体   English   中英

在熊猫中使用两个数据框进行计算

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM